如何使用Python读取服务器上的所有证书

Urs*_*jor 3 python certificate certificate-store

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

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

Phi*_*nne 5

要列出给定 IP 地址的服务器上的所有证书,高级流程将如下所示:

For each IP:
    For every port: 
        initiate a TLS/SSL connection
        collect SSL Certificate information
        then do your parsing, extraction etc
Run Code Online (Sandbox Code Playgroud)

标准 Python 库包含您开始使用核心部分所需的基本内容:

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

对于 IP 也是如此:

>>> ssl.get_server_certificate(('109.88.203.241', 443,))
Run Code Online (Sandbox Code Playgroud)

然后您可以或多或少地这样编写扫描循环:

import ssl
for ip in ips_to_scan:
    for port in range(65536):
        try:
            yield ssl.get_server_certificate((ip, port,))
        except:
            pass
Run Code Online (Sandbox Code Playgroud)

注意:我忽略了网络礼貌问题,并忽略了 nmap,因为这是一个 Python 问题。try/ except 传递也很残酷,但这只是一个例子。当然,您可能想要完善错误管理。

有许多可用的库可以广泛地处理这个问题,除此之外还有更高级的东西。其中一些包括: