私は、SavonとHTTPi、Ruby石鹸クライアントとRubyHTTPクライアントのインターフェースをそれぞれ使用してSSL経由で石鹸リクエストを書いています。コードは次のとおりです。
client = Savon::Client.new(original_class.constantize.wsdl_url)
client.http.auth.ssl.cert_key_file = "path_to_the_key"
client.http.auth.ssl.cert_key_password = 'secret'
client.http.auth.ssl.cert_file = "path_to_the_certification"
client.http.auth.ssl.verify_mode = :none
@response = client.request :ins0, action do
soap.body = encoded_body
end
それが私がこれを機能させる唯一の方法です。しかし、他に3つの検証モードがあることを私は知っています。
- :peer(SSL_VERIFY_PEER)
- :fail_if_no_peer_cert(SSL_VERIFY_FAIL_IF_NO_PEER_CERT)
- :client_once(SSL_VERIFY_CLIENT_ONCE)
検証モードを上記の他のいずれかに変更すると、次のエラーが発生します。
OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
それから私の質問が来ます(私が持っている他のものの中で):
- 検証モードを:noneのままにすると、間違ったことをしますか?セキュリティの欠如はありますか?
- エラーは実際にはどういう意味ですか?私のコードが間違っているのか、それとも私の証明書(自己割り当て---私は開発環境にいます)が良くないのですか?
検証モードに関するOpenSSLのドキュメントを読みました。
http://www.openssl.org/docs/ssl/SSL_CTX_set_verify.html
クライアントモードでのSSL_VERIFY_NONEについて、次のように述べています。
証明書検証プロセスの結果は、SSL_get_verify_result(3)関数を使用してTLS/SSLハンドシェイク後に確認できます。検証結果に関係なく、ハンドシェイクは継続されます。
心配する必要がありますか?検証モード:noneを危険なものと見なす必要がありますか?
他の検証モードでは動作させることができないため、SSL経由のsoapリクエスト機能を現在のようにリリースしたいと思います。しかし、それが危険である可能性がある場合、私は確かにそれをしません。