有没有办法关闭 SSL 检查,以便在 python 中使用 SOAPpy 时不会生成 WrongHost 异常。
问问题
1561 次
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 回答