【问题标题】:Python requests SSL error with combined .pem filePython 使用组合的 .pem 文件请求 SSL 错误
【发布时间】:2015-10-14 23:25:00
【问题描述】:

我有一个由根 ca 签名的内部子 ca 签名的内部服务器/api。在我的浏览器中,该站点是受信任和经过验证的,因为已导入根 ca 和 sub ca 证书。我还可以验证 Web 服务器的签名链。

我正在使用 python 请求库来调用 api。我创建了一个包含根 ca 和子 ca 证书的 .pem 文件

例如

-----BEGIN CERTIFICATE-----
snathopONSETUHO...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
snathopONSETUHO...
-----END CERTIFICATE-----

当我使用请求调用时

r = requests.get('https://server/api', auth=(user,password), cert='/path/to/cert_bundle.pem')

我收到的错误是

---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
<ipython-input-16-04e0aff97162> in <module>()
----> 1 r = requests.get('https://host/api/', auth=(user,password), cert='/path/to/cert_bundle.pem')

/usr/lib/python2.7/site-packages/requests/api.pyc in get(url, **kwargs)
     66
     67     kwargs.setdefault('allow_redirects', True)
---> 68     return request('get', url, **kwargs)
     69
     70

/usr/lib/python2.7/site-packages/requests/api.pyc in request(method, url, **kwargs)
     48
     49     session = sessions.Session()
---> 50     response = session.request(method=method, url=url, **kwargs)
     51     # By explicitly closing the session, we avoid leaving sockets open which
     52     # can trigger a ResourceWarning in some cases, and look like a memory leak

/usr/lib/python2.7/site-packages/requests/sessions.pyc in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    462         }
    463         send_kwargs.update(settings)
--> 464         resp = self.send(prep, **send_kwargs)
    465
    466         return resp

/usr/lib/python2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
    574
    575         # Send the request
--> 576         r = adapter.send(request, **kwargs)
    577
    578         # Total elapsed time of the request (approximately)

/usr/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    429         except (_SSLError, _HTTPError) as e:
    430             if isinstance(e, _SSLError):
--> 431                 raise SSLError(e, request=request)
    432             elif isinstance(e, ReadTimeoutError):
    433                 raise ReadTimeout(e, request=request)

SSLError: [SSL] PEM lib (_ssl.c:2757)

任何想法为什么我的证书无法验证?我尝试颠倒 .pem 文件中的顺序,以防顺序很重要,但仍然无法让我的请求生效。

我也尝试了verify=False,它有效但不是我想要的并引发错误

/usr/lib/python2.7/site-packages/urllib3/connectionpool.py:769: 
InsecureRequestWarning: Unverified HTTPS request is being made. Adding 
certificate verification is strongly advised. See: 
https://urllib3.readthedocs.org/en/latest/security.html
  InsecureRequestWarning)

【问题讨论】:

    标签: python ssl python-requests


    【解决方案1】:

    您似乎使用了错误的参数来传递证书包的路径,您的代码应为:

    r = requests.get('https://server/api', auth=(user,password), verify='/path/to/cert_bundle.pem')
    

    用于验证由CA签署的远程证书的参数是verify。如果您只指定verify=True,那么它将使用默认的内部根证书存储,但您也可以像我的代码示例中那样将路径传递到您自己的存储。

    cert 参数用于向远程服务器确认您自己的身份,您的服务器可能不关心这里。

    【讨论】:

    • 感谢您对选项的澄清。我实际上已经尝试过 verify='cert.pem' 但收到 SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:765) 那时我猜我的证书有问题,但我不确定它会是什么。
    • 我发现我的 cert_bundle.pem 文件不正确。它在文件中没有完整的证书链(根 ca 和子 ca)证书。在修复它并使用验证而不是证书之后,我能够让它工作。
    【解决方案2】:

    会话中的参数错误 它不是 cert 它是 verify....

    import gitlab
    import requests
    
    session = requests.Session()
    session.verify = 'ca_cert.pem'
    domain = 'https://your.gitlab.server.com'
    gl = gitlab.Gitlab(domain, private_token='your access token', api_version="4", session=session)
    gl.auth()
    
    pathToProject = "path/to/repo"
    project = gl.projects.get(pathToProject)
    items = project.repository_tree()
    
    print(items)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多