为什么 Python 不加载 ca 证书?

齿

我在 python 默认文件中添加了一个捆绑证书

>>> import ssl; print(ssl.get_default_verify_paths())
DefaultVerifyPaths(cafile='/usr/lib/ssl/cert.pem', capath='/usr/lib/ssl/certs', openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/lib/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/lib/ssl/certs')

并且证书似乎运行良好

>>> import requests; requests.get('https://westeurope.experiments.azureml.net', verify='/usr/lib/ssl/cert.pem')
<Response [530]>

但是,当我尝试在没有明确指定证书文件的情况下执行相同的请求时,它失败了。

>>> requests.get('https://westeurope.experiments.azureml.net')
# ...
requests.exceptions.SSLError: HTTPSConnectionPool(host='westeurope.experiments.azureml.net', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1051)')))

在我看来,这不应该发生,对吧?为什么 Python 没有加载我在默认路径中提供的证书?

我正在使用 Python 3.7.1

谢谢

dave_thompson_085

requests不使用默认值ssl它使用 envvarREQUESTS_CA_BUNDLECURL_CA_BUNDLEif set 并以其他方式使用(spunoff)certifi模块,这取决于您安装 requests&certifi 的方式(您没有说)以及您未识别的环境可能使用系统默认值(可能相同也可能不同)作为ssl) 中使用的 OpenSSL,或者可能是它自己的 Mozilla 副本。在后一种情况下,它应该根据该站点的需要包含 Digicert Global Root CA,因为 Firefox(也是 Mozilla)会这样做。

看看requests.certs.where()python -m requests.certs

主要是欺骗
Python 请求 - 如何使用系统 CA 证书(debian/ubuntu)?
如何强制请求使用我的 ubuntu 系统上的证书
为什么 python 请求默认不使用系统 ssl 证书?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章