Python服务器特定SSL认证错误
我正在尝试从以下地址下载PDF: 我一直在使用请求库,如下所示:Python服务器特定SSL认证错误,python,python-3.x,ssl,python-requests,ssl-certificate,Python,Python 3.x,Ssl,Python Requests,Ssl Certificate,我正在尝试从以下地址下载PDF: 我一直在使用请求库,如下所示: url = 'https://www.sce.com/NR/sc3/tm2/pdf/ce12-12.pdf' site = requests.get(url) with open('outfile.pdf','wb') as outfile: outfile.write(site.content) 本周,我开始收到以下SSL错误: HTTPSConnectionPool(host='wwww1.sce.com',por
url = 'https://www.sce.com/NR/sc3/tm2/pdf/ce12-12.pdf'
site = requests.get(url)
with open('outfile.pdf','wb') as outfile:
outfile.write(site.content)
本周,我开始收到以下SSL错误:
HTTPSConnectionPool(host='wwww1.sce.com',port=443):url:/NR/sc3/tm2/pdf/ce12-12.pdf超过了最大重试次数(由SSLError引起(SSLError(1,[SSL:CERTIFICATE\u VERIFY\u FAILED]CERTIFICATE VERIFY FAILED(_SSL.c:645)))
我注意到,当我在Chrome中下载PDF(通过开发工具网络监控)时,web浏览器中的GET请求返回代码302,然后对以下url发出不同的GET请求:
如果我调整上面的代码并使用该URL发出GET请求,我将收到相同的SSL错误
我使用相同的代码从不同的站点下载不同的PDF,没有错误:
url2 = 'https://www.pge.com/tariffs/assets/pdf/tariffbook/ELEC_SCHEDS_A-1.pdf'
site2 = requests.get(url2)
with open('outfile2.pdf','wb') as outfile:
outfile.write(site2.content)
我在计算机上更新了SSL,并重新编译Python以使用更新的SSL配置。在Python中运行时,我得到以下输出:
import ssl
print(ssl.OPENSSL_VERSION)
>>>OpenSSL 1.0.2h 3 May 2016
如果我在requests命令中指定“verify=False”,我可以获得要下载的第一个URL,但我不希望这样做
有人知道发生了什么事吗?我认为我的SSL总体上工作正常,因为第二个HTTPS请求顺利通过。我认为第一个URL处理请求的方式还有其他一些特殊之处,但我不太确定。我所看到的url和url2之间唯一明显的区别是url在请求头中有一个cookie。url2的请求标头中没有Cookie
我正在运行Python 3.5.2和请求库的2.20.1版
提前感谢。服务器需要一个合适的证书链。您必须将中间证书添加到您的信任存储中。这取决于您的操作系统。服务器已断开-不完整的信任链。您可以从获取缺少的链证书。将其作为PEM下载,并按照其他问题的答案中所述将其下载到您的信任商店。感谢链接Steffen!我下载了pem证书,并将其添加到certifi Python库正在使用的证书文件的末尾。这解决了我的问题!