如何使用Python读取服务器上的所有证书
问题描述:
我有一个Python中的证书解析器,它只使用pyasn1读取PEM格式。但是,我如何 1.列出服务器上的所有证书给定的IP地址如何使用Python读取服务器上的所有证书
这样我的解析器可以读取它们中的每一个一对一提取字段?
答
要列出给定一个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的问题。尝试/除了传递也是残酷的,但这是一个例子。当然你可能想要改进错误管理。
有很多图书馆可以处理这个广泛的超出这个和更先进的东西。其中一些包括:
- SSLyze(GPL)
- sslscan(LGPL)
- mitmproxy(MIT)
- sslchecker(MIT)
通过你的端口或SNI意思或两者? –
它可以是。 –
通过端口可能是一个很好的任务nmap。有一个扫描仪脚本。要通过SNI来完成,您需要先知道要查询的主机名。 –