我已经在 debian 的 /usr/share/ca-certificates/local
中安装了一个自签名根 ca 证书,并使用 sudo dpkg-reconfigure ca-certificates
安装了它们。此时 true | gnutls-cli mysite.local
很高兴,并且 true | openssl s_client -connect mysite.local:443
很高兴,但是python2和python3请求模块坚持认为它对证书不满意。
蟒蛇2:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python2.7/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
蟒蛇3
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 70, in get
return request('get', url, params=params, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/api.py", line 56, in request
return session.request(method=method, url=url, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 488, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/sessions.py", line 609, in send
r = adapter.send(request, **kwargs)
File "/usr/local/bin/python3.5/site-packages/requests/adapters.py", line 497, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: ("bad handshake: Error([('SSL routines', 'ssl3_get_server_certificate', 'certificate verify failed')],)",)
为什么 python 忽略系统 ca-certificates 包,我该如何集成它?
原文由 ThorSummoner 发布,翻译遵循 CC BY-SA 4.0 许可协议
来自 https://stackoverflow.com/a/33717517/1695680
要使 python 请求使用系统 ca-certificates 包,需要告诉它在它自己的嵌入式包上使用它
Requests 在此处嵌入其捆绑包,以供参考:
或者在较新的版本中使用附加包从以下位置获取证书: https ://github.com/certifi/python-certifi
要验证从哪个文件加载证书,您可以尝试: