URLError:自动文件下载期间证书验证失败

时间:2017-11-28 21:01:55

标签: python https ssl-certificate urllib2 client-certificates

我的代码和我的证书的PEM版本无法自动登录我需要下载文件的网站。有人可以帮忙吗?!

我知道我使用了正确的客户端证书,因为我可以使用证书通过Internet Explorer手动下载文件。此外,我的自动化此任务的代码曾经工作过。改变了什么:我获得了一个更新的证书,我现在需要使用它。

证书以.pfx格式提供给我。为了在python 3.5中使用urllib.request.urlopen命令,我需要将其转换为.PEM文件格式。几个月前,当我第一次解决这个问题时,我可以发誓我使用内置的Windows实用程序执行了转换。但是,我无法弄清楚如何再次这样做。在IE中我选择工具>>互联网选项>>内容>>证书>> (选择证书)导出>>下一个>>是的,导出私钥 - 它不允许我以Base-64编码的X.509(它变灰)导出文件,据我所知使用PEM。我需要那个私钥。

所以,我的另一个选择是使用OpenSSL pkcs12实用程序。这是语法:

OpenSSL> pkcs12 -in "C:\Users\Default\Documents\cert.pfx" -out "C:\Users\Default\Documents\cert.pem" -nodes

它生成文件,然后在python:

from urllib.request import urlopen
from ssl import create_default_context
from shutil import copyfileobj

context = create_default_context()
context.load_cert_chain(r'C:\Users\Default\Documents\cert.pem')

with urlopen(url, context=context) as response, open(dl_path, 'wb') as out_file:
    copyfileobj(response, out_file)

注意:网址与我在网络浏览器中使用的网址相同。我收到以下错误:

ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)>

使用记事本检查时,生成的文件看起来与旧证书的.PEM文件非常相似。

我已经做了很多搜索,并试图解决这个问题,但在这一点上,我不知道该转向何方。有人可以帮忙吗?!

0 个答案:

没有答案