1

PythonでSOAPpyを使用するときにWrongHost例外が生成されないように、SSLチェックをオフにする方法はありますか?

4

2 に答える 2

5

次のように、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モジュールがホスト名をチェックしないようにする方法がわかりません。

于 2010-02-24T18:26:12.210 に答える
0

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 ソースを参照してください。

于 2011-06-24T21:35:48.703 に答える