为什么 Python 没有加载 ca 证书?
Why Python isn't loading the ca certificate?
我已将捆绑证书添加到 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
谢谢
requests
不使用 ssl
中的默认值;它使用 envvar REQUESTS_CA_BUNDLE
或 CURL_CA_BUNDLE
如果设置否则 uses the (spunoff) certifi
module 这取决于你如何安装你没有说的请求和证书以及你没有识别的环境可能使用系统默认值(它可能与 ssl
中使用的 OpenSSL 相同,也可能不同)或者可能是它自己的 Mozilla 副本。在后一种情况下,它 应该 根据该站点的需要包含 Digicert Global Root CA,因为 Firefox(也包括 Mozilla)会这样做。
看看requests.certs.where()
或python -m requests.certs
大部分是骗人的
How to force requests use the certificates on my ubuntu system
我已将捆绑证书添加到 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
谢谢
requests
不使用 ssl
中的默认值;它使用 envvar REQUESTS_CA_BUNDLE
或 CURL_CA_BUNDLE
如果设置否则 uses the (spunoff) certifi
module 这取决于你如何安装你没有说的请求和证书以及你没有识别的环境可能使用系统默认值(它可能与 ssl
中使用的 OpenSSL 相同,也可能不同)或者可能是它自己的 Mozilla 副本。在后一种情况下,它 应该 根据该站点的需要包含 Digicert Global Root CA,因为 Firefox(也包括 Mozilla)会这样做。
看看requests.certs.where()
或python -m requests.certs
大部分是骗人的
How to force requests use the certificates on my ubuntu system