Я обратился к comp.lang.python, чтобы узнать, есть ли у кого-нибудь какие-либо идеи по этому вопросу. Я не получил ответа в списке рассылки, поэтому решил обратиться сюда.
У меня странная причуда с модулем M2Crypto, и я надеюсь, что кто-то сможет указать мне правильное направление. Я работаю с коллегой по разработке внутреннего инструмента для проверки SSL-сертификатов в списке адресов IPv4, полученных через stdin.
Мы используем M2Crypto, чтобы помочь с проверкой сертификатов. Если мы проверим только один IPv4-адрес, он сможет предоставить нам правильный сертификат, и мы сможем провести проверку достоверности информации, содержащейся в SSL-сертификате.
Однако, если мы попытаемся проверить несколько адресов IPv4, мы получим «M2Crypto.SSL.Checker.NoCertificate». Есть несколько случаев, когда мы должны получить это. Однако независимо от того, что является вторым или третьим адресом IPv4 (даже если он проверен как первый), он потерпит неудачу.
Создание контекста:
global context
context = M2Crypto.SSL.Context()
if sys.platform.startswith('linux'):
context.load_verify_info(capath="/etc/ssl/certs/")
elif sys.platform.startswith('darwin'):
context.load_verify_info(cafile=certfile)
else:
print "Unknown platform, bail!"
exit(1)
context.set_allow_unknown_ca(True)
context.set_verify(M2Crypto.SSL.verify_none,9)
Создание сокета:
conn = M2Crypto.SSL.Connection(context)
socket.setdefaulttimeout(2.0)
conn.set_socket_read_timeout(M2Crypto.SSL.timeout(sec=2))
conn.set_socket_write_timeout(M2Crypto.SSL.timeout(sec=2))
try:
conn.connect((ip,443))
# we can the catch the exception here, but it shouldn't be failing
Вышеупомянутые две части кода существуют в своих собственных функциях. Создание контекста вызывается только один раз, поскольку контекст используется глобально для всех соединений. Сначала я подумал, что это может быть проблемой, а затем попытался создать контекст в каждом цикле без изменений.
Последний блок вызывается как часть цикла по массиву адресов. IP передается от звонящего.
-Tim