我正在构建一个快速的 python 脚本来定期检查我的客户网站是否正常工作。其中一项检查是确保他们的 SSL 证书是最新的,或者在他们的证书即将到期时提供警报。
ssl 包提供了一种使用 SSLSocket.getpeercert() 方法获取对等证书的方法,但这只会在证书可以验证时返回证书。如果尚未获得 CA 证书,则验证不起作用。
我想要做的是获取对等证书,即使它无法被验证,这样我就能够获取获取正确 CA 证书所需的信息,并进行其他检查,例如检查域名匹配,到期日期在正确的范围等有没有人知道获取这些信息的方法?
pyCurl和pyOpenSSL看起来像是可能的候选对象,但无法找到示例或设法让它们返回证书。
干杯
可以使用 shell 脚本来获取证书,然后使用 Python 迭代证书输出文件。就像是:
$ openssl s_client -connect host:port -showcerts > certfile
Run Code Online (Sandbox Code Playgroud)
可能会起作用。您还可以阅读有关 pyOpenSSL 对象的文档Connection,该对象有一个get_peer_certificate()方法:
http://packages.python.org/pyOpenSSL/openssl-connection.html#l2h-187
我从未使用过 pyOpenSSL 模块,但这可能是您将所有内容保留在 Python 中的最佳选择。