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

How to set trust-store used by Python's httplib?

默认情况下,Python 的 httplib.HTTPSConnection 使用系统的信任库来验证 HTTPS 证书。 (如何)是否可以设置不同的 CA 列表来进行验证,替换默认列表?

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

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。)

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

您无需覆盖默认证书存储,只需生成默认可识别的正确 SSL 证书即可。

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

不需要玩证书存储,这是有风险的,并且取决于每个平台。更不用说它在小更新时收支平衡的变化很大。

这似乎不太可能,我们 'solved' 使用 Python-requests 来解决问题,因为它允许我们设置 CA 包。

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

另请参阅:Requests documentation: SSL Cert Verification