Есть ли способ отключить проверку SSL, чтобы исключения WrongHost не генерировались при использовании SOAPpy в python.Выключить SSLchecking в M2Crypto в Python
ответ
Вы можете отключить все проверки сертификата равноправного 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
для проверки имен хостов.
Развивая ответ 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.