Как я могу получить сертификат узла TLS / SSL удаленного хоста с помощью python?

Мне нужно просканировать список IP-адресов и получить общее имя из сертификата на этом IP-адресе (для каждого IP-адреса, который разрешает соединения с портом 443). Я смог успешно сделать это, используя сокеты и ssl-модули. Он работает для всех IP-адресов с действующими подписанными сертификатами, но не работает для самозаверяющих сертификатов.

Если я использую этот метод, он требует действительного сертификата, который подтвержден моим пакетом CA:

from socket import socket
import ssl

s = socket()
c = ssl.wrap_socket(s,cert_reqs=ssl.CERT_REQUIRED, ca_certs='ca-bundle.crt')
c.connect(('127.0.0.1', 443))

print c.getpeercert()

Если я удалю cert_reqs = ssl.CERT_REQUIRED , он подключается, но не получает сертификат на всех.

Как я могу получить общее имя сертификата на IP независимо от того, соответствует ли он пакету ca-bundle?

31
задан Flow 14 November 2014 в 17:59
поделиться