有没有办法关闭SSL检查,以便在python中使用SOAPpy时不会生成WrongHost异常。
答案 0 :(得分: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 config似乎使用了socket
模块而不是M2Crypto.SSL
(参见第132行)。我不知道如何阻止socket.ssl
模块检查主机名。
答案 1 :(得分: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 source。