使用Python验证SSL证书

艾丽·考特赖特(Eli Courtwright):

我需要编写一个脚本,该脚本通过HTTPS连接到我们企业内部网上的许多站点,并验证其SSL证书是否有效;这些证书尚未过期,为正确的地址颁发证书等。对于这些站点,我们使用自己的内部公司证书颁发机构,因此我们拥有CA的公钥来验证证书。

默认情况下,Python在使用HTTPS时仅接受并使用SSL证书,因此,即使证书无效,诸如urllib2和Twisted之类的Python库也会很乐意使用该证书。

是否有一个好的库可以让我通过HTTPS连接到站点并以这种方式验证其证书?

如何在Python中验证证书?

Jan-Philip Gehrcke博士:

从版本2.7.9 / 3.4.3开始,Python 默认情况下会尝试执行证书验证。

这在PEP 467中已提出,值得一读:https : //www.python.org/dev/peps/pep-0476/

所做的更改会影响所有相关的stdlib模块(urllib / urllib2,http,httplib)。

相关文件:

https://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection

现在,此类默认情况下执行所有必要的证书和主机名检查。要恢复为先前未验证的行为,可以将ssl._create_unverified_context()传递给context参数。

https://docs.python.org/3/library/http.client.html#http.client.HTTPSConnection

在版本3.4.3中更改:此类现在默认情况下执行所有必要的证书和主机名检查。要恢复为先前未验证的行为,可以将ssl._create_unverified_context()传递给context参数。

请注意,新的内置验证基于系统提供的证书数据库。与此相反,请求包附带了自己的证书捆绑包。PEP 476的“ 信任数据库”部分讨论了这两种方法的优缺点

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章