私はMechanizeを使用してサイトをスクラップし、ホスト名の不一致に関連するエラーを取得しています。私は問題の根本が、私が掻いているサイトでSNIが使用されていることを発見しました。正しい証明書が使用されていることを確認するためにホスト名を指定したいと思います。Mechanize Hostname Matching
OpenSSL::SSL::SSLSocket.hostname = "website.com"
が、このことが可能です:
agent = Mechanize.new
agent.user_agent = custom_user_agent
agent.verify_mode = OpenSSL::SSL::VERIFY_PEER
page = agent.get "website.com"
そして、ここでは私が使用され、正しい証明書を確認するために追加(またはこれらの線に沿って何か)する必要があると思うものです:
は、ここに私の現在の設定ですMechanizeで行うか、手動で使用する証明書を指定する方法を理解する必要がありますか?
私はVERIFY_NONE
ソリューションについて認識していますが、導入した脆弱性を考慮して回避することをお勧めします。
OpenSSL 1.0.2以下は***ではありません***はホスト名の一致を実行します。 cURLやMechanizeなどのアプリケーションは、マッチングを実行する必要があります。 [OpenSSL 1.1.0はそれを実装する予定です](http://wiki.openssl.org/index.php/Hostname_validation)。あなたがホスト名に合った問題を抱えているなら、この時点でMechanizeから確実に来ます。 SNIはTLS機能なので、TLS 1.0以上を使用していることを確認してください。私はあなたの問題がMecahanize(またはRuby)であると推測しています* SNIを使用していません*です。 – jww
@jww Mechanizeで設定する方法はないようです。あなたはSNIをサポートするために、そうするか、あるいは、代わりにMechanizeに気づいていますか? –
多分(私はRubyやMechanizeの開発者ではない)[RubyのTLSコンテキストオプションを設定する方法(OpenSSL :: SSL :: SSL_OP_NO_SSLv2のように)](http://stackoverflow.com/q/22550213)と[ OpenSSL :: SSL :: SSLError:hostnameがサーバー証明書と一致しません](http://stackoverflow.com/q/23190868)。呼び出される必要があるOpenSSL関数は['SSL_set_tlsext_host_name'](http://wiki.openssl.org/index.php/SSL/TLS_Client)ですが、Rubyが呼び出す場合にはわかりません。 – jww