使用Python从对等方获取未验证的SSL证书
我正在写一个简单的Python脚本,定期检查我的客户网站是否正常运行。其中一个检查就是确保他们的SSL证书是有效的,或者在证书快到期时发出警报。
ssl这个包提供了一种方法,可以通过SSLSocket.getpeercert()来获取对方的证书,但这个方法只有在证书可以被验证的情况下才会返回证书。如果没有获取到CA证书,验证就无法进行。
我想要做的是,即使证书无法验证,也能获取到对方的证书,这样我就可以获取到需要的信息,比如获取正确的CA证书,以及进行其他检查,比如检查域名是否匹配、证书的到期日期是否在正确的范围内等等。有没有人知道怎么获取这些信息呢?
pyCurl和pyOpenSSL看起来是可能的选择,但我找不到示例,也没能让它们返回证书。
谢谢!
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中处理这个问题的最佳选择。