2010-02-24 1 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", "/") 

... 

Я надеюсь, что вы знаете, что это будет существенно отключить безопасности для любого соединения SSL, созданное с M2Crypto. Поэтому это не рекомендуется вообще, за исключением случаев, когда вы только общаетесь с одним сервером и считаете, что риск «человек в середине» более приемлем, чем незашифрованный HTTP.

До сих пор для решения M2Crypto, но вопрос (в отличие от вашего названия) просит SOAPpy (который я до сих пор не используется), то решение может быть различным, так как SOAPpy config, кажется, использует socket модуль вместо от M2Crypto.SSL (см. строку 132). Я не знаю, как предотвратить модуль socket.ssl для проверки имен хостов.

0

Развивая ответ AndiDog, вы можете установить postConnectionCheck на основе экземпляра по-экземпляра и в версии 0.21.1 (по крайней мере) из M2Crypto, есть 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.