使用Python从对等方获取未验证的SSL证书

6 投票
1 回答
2118 浏览
提问于 2025-04-16 14:41

我正在写一个简单的Python脚本,定期检查我的客户网站是否正常运行。其中一个检查就是确保他们的SSL证书是有效的,或者在证书快到期时发出警报。

ssl这个包提供了一种方法,可以通过SSLSocket.getpeercert()来获取对方的证书,但这个方法只有在证书可以被验证的情况下才会返回证书。如果没有获取到CA证书,验证就无法进行。

我想要做的是,即使证书无法验证,也能获取到对方的证书,这样我就可以获取到需要的信息,比如获取正确的CA证书,以及进行其他检查,比如检查域名是否匹配、证书的到期日期是否在正确的范围内等等。有没有人知道怎么获取这些信息呢?

pyCurlpyOpenSSL看起来是可能的选择,但我找不到示例,也没能让它们返回证书。

谢谢!

1 个回答

3

你可以尝试用一个脚本来获取证书,然后用Python来处理这些证书输出的文件。可以试试下面这样的代码:

$ openssl s_client -connect host:port -showcerts > certfile

这个方法可能有效。你也可以看看pyOpenSSL的文档,里面有一个叫Connection的对象,它有一个get_peer_certificate()的方法:

http://packages.python.org/pyOpenSSL/openssl-connection.html#l2h-187

我自己没有用过pyOpenSSL这个模块,但它可能是你在Python中处理这个问题的最佳选择。

撰写回答