2016-05-18 3 views
1

У меня есть парсер сертификатов в Python, который читает только формат PEM с использованием pyasn1. Тем не менее, как мне сделать 1. Листинг всех сертификатов на сервере с учетом IP-адресаКак читать все сертификаты на сервере с помощью Python

так, чтобы мой синтаксический анализатор мог прочитать каждый из них 1 на 1 для извлечения полей?

+0

Судя по всему вы имеете в виду порт или SNI или оба? –

+0

Это может быть либо. –

+1

Порт может быть хорошей задачей для nmap. Для этого есть сценарий сканера. Чтобы сделать это с помощью SNI, вам нужно сначала узнать имена хостов. –

ответ

4

Чтобы получить список всех сертификатов на сервере данного IP-адреса поток высокого уровня будет идти, как это:

For each IP: 
    For every port: 
     initiate a TLS/SSL connection 
     collect SSL Certificate information 
     then do your parsing, extraction etc 

Стандартная библиотека Python имеет важное значение вам нужно, чтобы идти с основной частью:

>>> import ssl 
    >>> ssl.get_server_certificate(('www.google.com', 443,)) 
    '-----BEGIN CERTIFICATE-----\nMIIEgDCCA2igAwIBAgIIcdMVyU ... 
    [...] 
    \nsaofrQ==\n-----END CERTIFICATE-----\n' 

Те же работы для IP-:

>>> ssl.get_server_certificate(('109.88.203.241', 443,)) 

Вы можете написать сканирование цикл более или менее таким образом:

import ssl 
for ip in ips_to_scan: 
    for port in range(65536): 
     try: 
      yield ssl.get_server_certificate((ip, port,)) 
     except: 
      pass 

Примечание: я игнорирую вопросы сетевой вежливости, и оставляя в стороне Nmap, так как это вопрос Python. Проба try/except тоже жестока, но это пример. Конечно, вы можете, конечно, усовершенствовать управление ошибками.

Существует много доступных библиотек, которые имеют дело с этим слишком за пределами этого и для более продвинутых продуктов. Некоторые из них включают в себя:

Смежные вопросы