2016-05-18 37 views
1

我有一个Python中的证书解析器,它只使用pyasn1读取PEM格式。但是,我如何 1.列出服务器上的所有证书给定的IP地址如何使用Python读取服务器上的所有证书

这样我的解析器可以读取它们中的每一个一对一提取字段?

+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的问题。尝试/除了传递也是残酷的,但这是一个例子。当然你可能想要改进错误管理。

有很多图书馆可以处理这个广泛的超出这个和更先进的东西。其中一些包括:

相关问题