Отключите проверку SSL в M2Crypto в Python - PullRequest
1 голос
/ 24 февраля 2010

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

Ответы [ 2 ]

5 голосов
/ 24 февраля 2010

Вы можете отключить все проверки сертификатов в 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 голосов
/ 25 июня 2011

Расширяя ответ 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 .

...