【问题标题】:Python Requests throwing SSLError after downloading certificate下载证书后 Python 请求抛出 SSLError
【发布时间】:2020-08-01 23:02:03
【问题描述】:

我正在使用 requests 包中的 requests.get() 命令,但收到以下错误,表明我认为我没有正确验证 SSL 连接。

requests.exceptions.SSLError: HTTPSConnectionPool(host='marketplace.spp.org', port=443):最大重试次数 超出网址: /file-browser-api/download/da-lmp-by-location?path=%2F2020%2F08%2FBy_Day%2FDA-LMP-SL-202008020100.csv (由 SSLError(SSLError(336265225, '[SSL] PEM lib (_ssl.c:3524)'),))

以下是我尝试使用 requests.get() 的方法。我分别尝试了它们,但它们都返回了相同的错误。

url = 'https://marketplace.spp.org/file-browser-api/download/da-lmp-by-location?path=%2F{}%2F{:02}%2FBy_Day%2FDA-LMP-SL-{}{:02}{:02}0100.csv'.format(year, month, year, month, day)
r = requests.get(url)
r = requests.get(url, cert='spp_cert.crt')
r = requests.get(url, verify='spp_cert.crt')
r = requests.get(url, verify='/etc/ssl/certs/ca-certificates.crt')

请注意,我已通过运行命令检索了证书“spp_cert.crt”

echo | openssl s_client -servername marketplace.spp.org -connect marketplace.spp.org:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > spp_cert.crt

我相信 /etc/ssl/certs/ca-certificates.crt 位置是我的 CA 包所在的位置,因为我从 bash 命令行运行了以下命令以找出答案。

python3 -m certifi

我想说明我一直使用 verify=False 作为参数,但随着代码从一次性产品演变为生产,我不再想忽略此警告。我承认我对 SSL 证书和验证的工作方式有些困惑,这可能是我的问题的根源。

最后,我想指出我可以通过 Firefox 下载相同的证书,但注意到它有两个下载证书的选项(PEM(证书)PEM(链)),我有预感问题是我需要下载证书链而不是一个证书。但我真的不知道这是如何工作的,如果这甚至是我需要做的,如果这是我需要做的,如何使用 openssl 来做到这一点。谢谢!

【问题讨论】:

    标签: python ssl python-requests openssl ssl-certificate


    【解决方案1】:

    问题确实是我需要下载证书链,而不仅仅是单个证书。我不知道如何使用 openssl 来做到这一点,但我可以在 Firefox 中做到这一点。

    这可以通过访问网站,单击网址旁边的挂锁,单击消息“连接安全”旁边的箭头,单击“更多信息”,转到“安全”选项卡,单击在“查看证书”上,然后单击“杂项”部分中的下载“PEM(链)”。这是使 requests.get() 正常工作所需的证书。

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 2016-02-05
      • 1970-01-01
      • 2015-04-24
      • 2016-05-19
      • 2020-08-14
      相关资源
      最近更新 更多