SSL证书下载

时间:2015-08-21 08:01:00

标签: python-2.7 ssl python-requests

我正在尝试使用python中的请求包来访问此站点:https://egov.uscis.gov/casestatus/landing.do 当我运行此命令时:

requests.get('https://egov.uscis.gov/casestatus/landing.do')

当您的身份验证验证失败时,我收到了常见的SSL错误。

通读stackoverflow并采用其中一个解决方案:在(.crt)中下载证书,然后使用openssl转换为.pem文件。然后我将此.pem文件中的内容复制到cacert.pem的末尾。但是这没用。

>>> requests.get('https://egov.uscis.gov/casestatus/landing.do')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\api.py", line 69, in get
    return request('get', url, params=params, **kwargs)
  File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\api.py", line 50, in request
    response = session.request(method=method, url=url, **kwargs)
  File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\sessions.py", line 465, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\sessions.py", line 573, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\Sandra\Anaconda\lib\site-packages\requests\adapters.py", line 431, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)

关于如何在不诉诸verify=False

的情况下克服这个问题的任何指示

通过https://superuser.com/a/97203https://superuser.com/a/176721下载文件有什么不同吗?

因为requests.get('https://www.google.com')没有问题,其他网站会对您下载的证书设置限制吗?

2 个答案:

答案 0 :(得分:1)

egov.usics.gov does not provide SSL握手中的完整链条。

SSL Labs report indicating incomplete chain

在网站管理员修复证书链问题之前,您需要采用类似于建议here的解决方法。您的案例中的中间证书可以从https://ssl-tools.net/certificates/yuox7i-symantec-class-3-secure-server-ca

获得

答案 1 :(得分:0)

设置CA证书有三种方法:

  • $ pip install certifi然后
    >>> requests.get(url, verify=certifi.where())

  • >>> requests.get(url, verify='/path/to/cert_bundle_file')

  • >>> os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/cert_bundle_file'
    >>> requests.get(url)