Python使用组合的.pem文件请求SSL错误

Python使用组合的.pem文件请求SSL错误,python,ssl,python-requests,Python,Ssl,Python Requests,我有一个内部服务器/api,该服务器/api由根ca签署的内部子ca签署。在我的浏览器中,由于根ca和子ca证书已导入,因此该站点是受信任和验证的。我还可以验证web服务器的签名链 我正在使用python请求库调用api。我创建了一个.pem文件,其中包括根ca和子ca证书 乙二醇 在提出请求时,我使用了 r=requests.get('https://server/api“,auth=(用户,密码),cert=”/path/to/cert_bundle.pem') 我收到的错误是 ------

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

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

乙二醇

在提出请求时,我使用了

r=requests.get('https://server/api“,auth=(用户,密码),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)

看起来您使用了错误的参数来传递证书捆绑包的路径,您的代码应为:

r = requests.get('https://server/api', auth=(user,password), verify='/path/to/cert_bundle.pem')
用于验证由CA签名的远程证书的参数为
verify
。如果您只指定
verify=True
,那么它将使用默认的内部根证书存储,但您也可以像我的代码示例中那样传入到您自己的存储的路径


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

会话中的参数错误 它不是证书它是验证

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)

感谢您对选项的澄清。事实上,我曾尝试过verify='cert.pem',但收到
SSLError:[SSL:CERTIFICATE\u verify\u FAILED]CERTIFICATE verify FAILED(\u SSL.c:765)
,当时我想我的证书有问题,但我不确定会是什么问题。我发现我的cert\u bundle.pem文件不正确。文件中没有完整的证书链(根ca和子ca)证书。修复后,使用验证而不是证书,我能够让这个工作。
r = requests.get('https://server/api', auth=(user,password), verify='/path/to/cert_bundle.pem')
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)