我在Python中有一个证书解析器,它只使用pyasn1读取PEM格式。但是,我该怎么做 1.在给定IP地址的服务器上列出所有证书
这样我的解析器可以逐个读取它们中的每一个来提取字段?
答案 0 :(得分: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传递也是残酷的,但这只是一个例子。当然,您可能希望改进错误管理。
有许多图书馆可以解决这个问题以及更高级的内容。其中一些包括: