5

私は、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リクエスト機能を現在のようにリリースしたいと思います。しかし、それが危険である可能性がある場合、私は確かにそれをしません。

4

1 に答える 1

7

しばらくして、OpenSSL User Supportメーリングリストに参加し、ようやく助けられました。

要するに:

モードフラグ:fail_if_not_peer_certおよび:client_onceはサーバー専用であり、クライアントには何の意味もないため、クライアントでは無視されます。

クライアントの目的では、:peer(SSL_VERIFY_PEER)だけが問題になります。

また、検証モードを:none(SSL_VERIFY_NONE)に設定するのは安全ではありません。そうすれば、サーバー認証は行われません。誰かが私のクライアントからの接続を傍受した場合、私のクライアントは違いを検出せず、攻撃者に機密データを提供します。

:peerを使用するには、クライアントのtrustedstoreに証明書が必要です。

OpenSSLメーリングリストのDaveThompsonに感謝します。

于 2012-09-27T12:35:24.607 に答える