如何设置Python的httplib使用的信任存储?

时间:2016-05-30 13:22:34

标签: python python-2.7 ssl https httplib

默认情况下,Python的https://www.sqlite.org/android/brlist。HTTPSConnection使用系统的信任存储来验证HTTPS证书。 (如何)可以设置不同的CA列表来进行验证,替换默认值?

我尝试设置httplib使用的httplib(见下文),但这只会添加给定文件中的证书;如果需要,它不会阻止验证器从系统的商店加载更多证书。

c = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
c.load_verify_locations(cafile='mozillacerts.pem', capath=None)

conn = httplib.HTTPSConnection(domain, port, context=c)

要明确:如果无法使用给定文件中的证书验证信任路径,我希望验证失败。

(我在Debian 8上使用Python 2.7.11。)

2 个答案:

答案 0 :(得分:0)

由于这似乎不太可能,我们通过使用Python'requests解决了这个问题,因为它允许我们设置CA包。

requests.get('https://' + domain, verify='mozillacerts.pem')

另请参阅:Requests documentation: SSL Cert Verification

答案 1 :(得分:-1)

Stefan,我确实看到了你尝试的两个问题:你应该使用ssl.PROTOCOL_SSLv23而不是已经过时的TLSv1。不要被变量名称混淆,请阅读链接文档以了解正确使用的值。

您不需要覆盖默认的证书存储区,而只需生成默认识别的正确SSL证书。

您可以从https://letsencrypt.org获得免费的SSL证书 - 我可以向您保证,所有浏览器,Python和JAVA应用程序都默认识别它们。

无需使用证书商店,这是有风险的,取决于每个平台。不要补充说,即使是在较小的更新中,它也有很大的突破性变化。