1

有没有办法关闭 SSL 检查,以便在 python 中使用 SOAPpy 时不会生成 WrongHost 异常。

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 连接的安全性。所以这根本不推荐,除非您只与一台服务器通信,并且认为中间人风险比未加密的 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 回答