19

如何让 python httplib 接受不受信任的证书?我在我的网络服务器上创建了一个蛇油/自签名证书,我的 python 客户端无法连接,因为我使用的是不受信任的证书。

我宁愿在我的客户端代码中解决这个问题,而不是让它在我的系统上受信任。

import httplib


def main():
    conn = httplib.HTTPSConnection("127.0.0.1:443")
    conn.request("HEAD","/")
    res = conn.getresponse()
    print res.status, res.reason
    data = res.read()
    print len(data)


if __name__ == "__main__":
    main()
4

2 回答 2

47

更新计算机后,我的一些脚本停止工作。原来,这是问题所在:https ://docs.python.org/2/library/httplib.html#httplib.HTTPSConnection

在 2.7.9 版更改:添加了上下文。

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

因此,如果您的 Python 版本 >= 2.7.9(在我的情况下为 2.7.10),您可能会遇到这种情况。为了解决这个问题,我更新了我的电话:

httplib.HTTPSConnection(hostname, timeout=5, context=ssl._create_unverified_context())

这可能是保留相同行为的最简单更改。

于 2015-08-24T18:38:14.467 回答
7

通过检查 Python 2.7.14 源代码,您可以设置环境变量

PYTHONHTTPSVERIFY=0

这将导致默认情况下禁用证书验证(这将适用于您程序的所有请求)。

我相信这适用于 2.7.12+ - 但不适用于 3.x。

参考。PEP 493:默认验证 HTTPS,但允许 envvar 覆盖它

于 2017-11-17T08:49:20.567 回答