2016-05-18 9 views
1

Ich habe einen Zertifikatsparser in Python, der nur PEM-Format liest mit Pyasn1. Wie kann ich jedoch 1. Alle Zertifikate auf einem Server mit der IP-AdresseSo lesen Sie alle Zertifikate auf einem Server mit Python

auflisten, so dass mein Parser jede von ihnen 1-mal-1 lesen kann, um die Felder zu extrahieren?

+0

Durch alles, was Sie bedeuten durch Port oder von SNI oder beides? –

+0

Es kann entweder sein. –

+1

Per Port könnte eine gute Aufgabe für nmap sein. Dafür gibt es ein Scannerskript. Um dies mit SNI zu tun, müssen Sie die Hostnamen kennen, die zuerst abgefragt werden sollen. –

Antwort

4

Um alle Zertifikate auf einem Server Liste Fluss eine IP-Adresse des hohen Pegels gegeben, wie dies gehen würde:

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

Die Standard-Python-Bibliothek hat die wesentlichen Sie mit dem Kernteil brauchen, um loslegen:

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

das gleiche funktioniert für eine IP-:

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

können Sie dann den Scan schreiben Schleife mehr oder weniger auf diese Weise:

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

Anmerkung: Ich bin Fragen der Netzwerk Höflichkeit zu ignorieren, und nmap abgesehen, da dies eine Python Frage. Der Versuch/Ausnahme-Pass ist auch brutal, aber das ist ein Beispiel. Vielleicht möchten Sie das Fehlermanagement natürlich verfeinern.

Es gibt viele Bibliotheken, die sich mit diesem weit über dieses hinaus und für fortgeschrittenere Materialien ausführlich beschäftigen. Einige von ihnen gehören:

Verwandte Themen