2010-02-24 26 views

回答

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模塊檢查主機名。

0

擴展在AndiDog的回答,您可以在實例的實例基礎和0.21.1版本(至少)M2Crypto的設置postConnectionCheck,有Connect.set_post_connection_check_callback()方法可以這樣做:

sslsock = M2Crypto.SSL.Connection(sslcontext) 
# Disable checking of server certificates 
sslsock.set_post_connection_check_callback(None) 

請注意,禁用連接到服務器和接受客戶端的檢查(後者在默認情況下處於禁用狀態)。

的參數,如果不是無,是一個函數,它的證書和地址,即:

check(self.get_peer_cert(), self.addr[0]) 

爲了參考,見M2Crypto source