我正在寻找一种方法来获取有关远程站点使用请求使用的SSL证书的信息(CA和CN就足够了)。
当我使用例如socket + OpenSSL时,我很容易得到那些,但在我的代码中我使用了一个特殊的解析器(Python 'requests' library - define specific DNS?),所以我需要使用Requests或urllib2 - 到目前为止我检查了大部分通过检查模块请求代码,我认为无法获得这些值。
我很欣赏这一点上的任何暗示,也许我错过了一些明显的东西:)
[编辑]:
更准确地说 - 我修补部分请求lib(从' socket'直到urllib2),使用自定义名称解析器 - 它归结为:
self.my_opener = urllib2.build_opener(MyHTTPHandler,MyHTTPSHandler)(urllib2.OpenerDirector instance)
my_opener.open(url)返回一个urllib.addinfourl对象 - 我需要从中提取证书信息,如果它完全可以。
不幸的是,问题并非如此,之后这个问题被标记为重复。
答案 0 :(得分:1)
在验证证书时,请求源代码非常明确,请参阅:
要么修补此代码,要么追踪它的调用位置:
答案 1 :(得分: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' library - define specific DNS?
这个案子太奇特了,我希望没有其他人永远必须使用它。但是,如果您正在使用请求,在自定义名称解析器之间切换并且必须检查SSL证书CA / CN,我希望这有助于:)