Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python服务器特定SSL认证错误_Python_Python 3.x_Ssl_Python Requests_Ssl Certificate - Fatal编程技术网

Python服务器特定SSL认证错误

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

我正在尝试从以下地址下载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',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库正在使用的证书文件的末尾。这解决了我的问题!