Отключите проверку SSL в M2Crypto в Python

Есть ли способ отключить проверку SSL, чтобы исключения WrongHost не генерировались при использовании SOAPpy в python.

2 ответа

Решение

Вы можете отключить все проверки сертификатов в 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, похоже, используется 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.

Другие вопросы по тегам