【发布时间】: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