【问题标题】:How to Use SSLContext with Python Requests Library?如何将 SSLContext 与 Python 请求库一起使用?
【发布时间】:2021-01-11 17:41:46
【问题描述】:

certifi 库经常遇到域证书问题,但在标准 urllib.request 库中没有问题。

如果我将上下文设置为使用证书文件,则会收到 SSL 错误,

import ssl
import certifi
import requests.urllib as urlrq

resp = urlrq.urlopen(url="https://<web address>/rest/info?f=json", 
                                  context=ssl.create_default_context(cafile=certifi.where()))

如果我使用标准库并设置上下文如下:

import ssl
import certifi
import requests.urllib as urlrq

resp = urlrq.urlopen(url="https://<web address>/rest/info?f=json", 
                                  context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))

没有 SSL 错误。

我如何才能获得兑现此SSLContext 的请求?

【问题讨论】:

    标签: python-3.x python-requests urllib3


    【解决方案1】:

    默认情况下,自行创建 ssl.SSLContext() 不会启用证书验证或加载 CA 证书。这就是您没有看到 SSL 错误的原因。使用ssl.create_ssl_context()会默认设置验证。

    所以这里的问题不在于SSLContextcertifi,而在于网站的证书以及您如何构建SSLContext。下一步是调查网站提供的证书为何无效。

    【讨论】:

    • 有没有办法从 urllib3/requests 中获取更多关于错误原因的信息?
    • 来自请求的确切错误消息:(由 SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败 (_ssl.c:852)') 引起,
    猜你喜欢
    • 2023-03-23
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 2017-02-09
    • 2011-09-09
    相关资源
    最近更新 更多