PythonでSOAPpyを使用するときにWrongHost例外が生成されないように、SSLチェックをオフにする方法はありますか?
2 に答える
次のように、M2Crypto のすべてのピア証明書チェックを無効にすることができます。
from M2Crypto import SSL, httpslib
context = SSL.Context("sslv3")
# Disable certificate checking
context.set_verify(0, depth = 0)
connection = httpslib.HTTPSConnection("somehostname", 443, ssl_context=context)
# Hack (!!!) for disabling host name check <CN> == <expected host name>.
# Will affect any future SSL connections made by M2Crypto!
SSL.Connection.postConnectionCheck = None
connection.connect() # <-- this would normally raise SSL verification errors
connection.request("GET", "/")
...
これにより、M2Crypto で作成された SSL 接続のセキュリティが本質的に無効になることを認識していただければ幸いです。したがって、1 つのサーバーとのみ通信していて、暗号化されていない HTTP を使用するよりも中間者のリスクを許容できると考える場合を除いて、これはまったくお勧めできません。
これまでのところ、M2Crypto ソリューションについてですが、(タイトルとは対照的に) 質問が SOAPpy (私はまだ使用していません) を要求しているため、SOAPpy 構成socket
は代わりにモジュールを使用しているように見えるため、ソリューションは異なる可能性がありますM2Crypto.SSL
(行を参照) 132)。socket.ssl
モジュールがホスト名をチェックしないようにする方法がわかりません。
AndiDog の回答を拡張すると、インスタンスごとに postConnectionCheck を設定できます。M2Crypto のバージョン 0.21.1 (少なくとも) では、Connect.set_post_connection_check_callback()
そうする方法があります。
sslsock = M2Crypto.SSL.Connection(sslcontext)
# Disable checking of server certificates
sslsock.set_post_connection_check_callback(None)
サーバーへの接続と受け入れられたクライアントの両方のチェックを無効にすることに注意してください (後者はデフォルトで無効になっています)。
パラメータが None でない場合は、証明書とアドレスを取得する関数です。つまり、次のようになります。
check(self.get_peer_cert(), self.addr[0])
参考までに、M2Crypto ソースを参照してください。