From: GOTOU Yuuzou Date: 2005-02-11T05:38:30+09:00 Subject: [ruby-dev:25670] Re: openssl binding for SSL_CTX_set_default_verify_paths and X509_STORE_set_default_paths In message <876513vce0.fsf@serein.a02.aist.go.jp>, `Tanaka Akira ' wrote: > open-uri で https を扱うことを考えていろいろと調べていた所、openssl で、 > SSL_CTX_set_default_verify_paths および > X509_STORE_set_default_paths > が Ruby レベルに提供されていないことに気がつきました。 > > これらが提供されていないのは意図されているのでしょうか? SSL_CTX_set_default_verify_pathsはOpenSSL::SSL::SSLContextの 構造の都合で提供していません。この関数は、例えば次のように用 いられます。 if (!SSL_CTX_load_verify_locations(ctx,CAfile,CApath)){ if (!SSL_CTX_set_default_verify_paths(ctx)){ /* error */ } } (すでにご存知だと思いますが)OpenSSL::SSL::SSLContextにパラメー タを設定する各メソッドは、直接にはSSL_CTX構造体に反映せずに インスタンス変数だけをセットします。実際に反映されるのは SSLSocketが開始される時なので、対応するコードを次のように書 くことができません。 ctx = OpenSSL::SSL::SSLContext.new begin ctx.ca_file = "/path/cacert.crt" ctx.ca_path = "/path/cacerts" rescue # SSL_CTX_load_verify_locationsに対応するメソッド end これをできるようにするにはext/openssl/ossl_ssl.cの大部分を書 き直す必要があって、すぐには対応できそうにありません。 一方、X509_STORE_set_default_pathsは抜けているだけなので、 OpenSSL::X509::Store#set_default_pathsを追加します。 証明書検証まわりのパラメータはOpenSSL::X509::Storeにセットし て、OpenSSL::SSL::SSLContext#cert_store=で渡せば SSL_CTX_set_default_verify_pathsを呼んだのと同様に動くと思い ます。 ところで、verify_modeのデフォルトはOpenSSLライブラリに任せて いるのですが、net/httpsではSSL_VERIFY_PEERをデフォルトにすべ きだったと考えるようになりました。せめてopen-uriではそうして はどうでしょうか。 -- ごとうゆうぞう