2017-06-27 29 views
1

実際のサーバーに接続する特注のHTTP/Sクライアント(twisted.HTTPClientベース)があるため、不正な証明書を処理する必要があります。証明書の確認エラーを特定する方法

https://expired.badssl.comに接続すると、[( 'SSLルーチン'、 'SSL3_GET_SERVER_CERTIFICATE'、 '証明書の検証に失敗しました')というargs /メッセージのOpenSSL.SSL.Errorが表示されます。ここまでは順調ですね..!

私のケースでは、私は特定の方法で証明書のエラーを処理する必要があるので、このタイプのSSL.Errorを他の人と明確に区​​別するにはどうすればいいですか? 私が見つけることができる唯一の方法は、文字列を比較することです。

+0

、あなたは[ 'SSL_get_verify_result'](HTTPSを呼び出します。 openssl.org/docs/man1.0.2/ssl/SSL_get_verify_result.html)成功/失敗のステータスを取得します。失敗した場合、コードは期限切れの証明書、信頼できないパス/チェーンなどを示します。マニュアルページのリンクは多少曲がっているように見えます。理由とエラーコードを含む['verify'アプリ](https://www.openssl.org/docs/man1.0.2/apps/verify.html)へのリンクです。私はあなたがPythonで何をしているのかよく分かりません。 OpenSSL wikiの[SSL/TLS Client](https://wiki.openssl.org/index.php/SSL/TLS_Client)も参照してください。 – jww

答えて

0

私が見つけることができる唯一の方法は、文字列を比較することです。 これは間違っています。

私はそれが唯一のアプローチだと思います。

OpenSSL.SSL.Errorは、SSL例外の基本クラスです。 AFAIKを直接呼び出す場合、エラーの種類を明確にする唯一の方法は、エラーメッセージタプル内の理由を比較することです。 pyopensslドキュメントから

「この例外を直接発生するたびに、それは各項目がタプル(libに、機能、理由)であるOpenSSLのエラーキューからエラーメッセージのリストを持ってここにLIB。 、機能とその理由はどこに説明すると、すべての文字列であり、問​​題が何であるか」

参照:// WWW:適切にOpenSSLの場合 https://pyopenssl.readthedocs.io/en/stable/api/ssl.html#OpenSSL.SSL.Error

関連する問題