Python requests库 - 获取SSL证书信息
我想找一种方法,通过requests库获取远程网站使用的SSL证书信息(只需要CA和CN就可以)。
当我使用socket和OpenSSL时,这些信息很容易获取,但在我的代码中,我使用了一个特殊的解析器(Python 'requests'库 - 定义特定的DNS?),所以我需要使用Requests或urllib2。到目前为止,我通过inspect模块检查了大部分requests的代码,但没有找到获取这些值的方法。
如果有人能给我一些提示,我会非常感激,也许我错过了什么明显的东西 :)
[编辑]:
更具体一点,我正在修改requests库的一部分(从'socket'到urllib2),以使用自定义的名称解析器,最终是这样的:
self.my_opener = urllib2.build_opener(MyHTTPHandler, MyHTTPSHandler)(urllib2.OpenerDirector实例)
my_opener.open(url)返回一个urllib.addinfourl对象 - 我需要从中提取证书信息,如果这可能的话。
不幸的是,这个问题并不是我之前提到的那个问题的重复。
2 个回答
1
Requests的源代码在验证证书方面写得非常清楚,可以参考以下链接:
你可以选择修改这段代码,或者找到它被调用的地方:
0
找到了。
例子:
f=my_opener.open(url)
f.fp._sock.fp._sock._sslobj # here's the ssl object holding the 'issuer' (CA) and 'server' (CN) attributes.
当你使用这个问题中的补丁时,这样做是有效的:Python 'requests' 库 - 定义特定的 DNS?
这个情况非常特殊,我希望没有人会 永远 需要使用这个。不过,如果你在使用 requests 库,切换自定义的名称解析器,并且需要检查 SSL 证书的 CA/CN,希望这能帮到你 :)