繁体   English   中英

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获得本地颁发者证书 (_ssl.c:1056)

[英]ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

当我用 python ssl 和 socket 测试 crl revoke 时

当我尝试使用python crl文件检查peer证书是否被吊销时,我查阅了python官方文档,但很少。 我的基本步骤:

  1. 将 .crl 文件转换为 .pem 文件。
  2. 调用 python ssl.load_verify_location 接口。
def tls_check(domain, port):
    addr = domain
    ctx = ssl.create_default_context()
    ctx.options &= ssl.CERT_REQUIRED
    ctx.verify_flags = ssl.VERIFY_CRL_CHECK_CHAIN
    ctx.check_hostname = False
    ctx.load_verify_locations(cafile="/home/linux/CloudBrahma_release/Utils/pre_crl.pem")
    sock = ctx.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM), server_hostname=addr)
    sock.connect((addr, port))
    print("TLS Ceritificate:")
    pprint.pprint(sock.getpeercert())
    print("TLS Version:", sock.version())
    print("TLS Cipher:", sock.cipher()[0])
    exit()
tls_check("xxxxx", 8080)

我收到这个错误

Traceback (most recent call last):
  File "test.py", line 28, in <module>
    tls_check("100.94.2.17", 8443)
  File "test.py", line 21, in tls_check
    sock.connect((addr, port))
  File "/home/linux/py3env/lib/python3.7/ssl.py", line 1150, in connect
    self._real_connect(addr, False)
  File "/home/linux/py3env/lib/python3.7/ssl.py", line 1141, in _real_connect
    self.do_handshake()
  File "/home/linux/py3env/lib/python3.7/ssl.py", line 1117, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
ctx.load_verify_locations(cafile="/home/linux/CloudBrahma_release/Utils/pre_crl.pem")

这需要具有受信任 CA 的文件。 如果您提供带有 CRL 的文件,则您基本上没有受信任的 CA。 这意味着它将无法找到证书的根 CA,因为您没有定义受信任的根 CA,导致

... certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)

相反,如果要检查 CRL,给定的cafile必须包含受信任的根 CACRL。 但诚然,这种 API 很奇怪,文档也没有真正的帮助。

urllib.error.URLError: <urlopen error [ssl: certificate_verify_failed] certificate verify failed: unable to get local issuer (_ssl.c:1076)< div><div id="text_translate"><p> 我在 python 代码中遇到证书错误,如下在 docker 容器laudio/pyodbc中运行</p><pre> File "/usr/local/lib/python3.7/site-packages/fredapi/fred.py", line 131, in get_series root = self.__fetch_data(url) File "/usr/local/lib/python3.7/site-packages/fredapi/fred.py", line 64, in __fetch_data response = urlopen(url) File "/usr/local/lib/python3.7/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/usr/local/lib/python3.7/urllib/request.py", line 525, in open response = self._open(req, data) File "/usr/local/lib/python3.7/urllib/request.py", line 543, in _open '_open', req) File "/usr/local/lib/python3.7/urllib/request.py", line 503, in _call_chain result = func(*args) File "/usr/local/lib/python3.7/urllib/request.py", line 1362, in https_open context=self._context, check_hostname=self._check_hostname) File "/usr/local/lib/python3.7/urllib/request.py", line 1321, in do_open raise URLError(err) urllib.error.URLError: &lt;urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)&gt;</pre><p> 我的证书是最新的</p><pre>root@8a03fe8175b7:/# pip install --upgrade certifi Requirement already up-to-date: certifi in /usr/local/lib/python3.7/site-packages (2020.4.5.1)</pre><p> 我也尝试使用没有帮助的<a href="https://stackoverflow.com/questions/15445981/how-do-i-disable-the-security-certificate-check-in-python-requests" rel="nofollow noreferrer">no_ssl_verification 解决方案</a>。</p><p> 另外,这个文件是空的,这意味着什么吗? 在我的主机上它已满</p><pre>root@2927b5836cfa:/# ls -alt /etc/ssl/certs/ca-certificates.crt -rw-r--r-- 1 root root 0 May 23 20:14 /etc/ssl/certs/ca-certificates.crt</pre><p> 来自容器中 python shell 的更多信息,我不知道这是否有帮助。 但是容器中没有 /export 目录:</p><pre> print(ssl.get_default_verify_paths()) DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/export/home/pb2/build/sb_0-35870562-1568195162.53/openssl-1.1.1d-el6-x86-64bit/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/export/home/pb2/build/sb_0-35870562-1568195162.53/openssl-1.1.1d-el6-x86-64bit/ssl/certs')</pre><p> 你能给我一些想法来解决这个问题吗?</p></div></urlopen>

[英]urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 ssl.SSLCertVerificationError:证书验证失败:无法获取本地颁发者证书(_ssl.c:1108) Python SSL error on discord.py: ssl.SSLCertVerificationError: certificate verify failed: unable to get local issuer certificate (_ssl.c:1056) urlopen 错误 [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1056) SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1129)')) ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:证书已过期 (_ssl.c:997) SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书)' SSL:CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1108) Discord/python ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败:无法获取本地颁发者证书 (_ssl.c:1123) <urlopen error [ssl: certificate_verify_failed] certificate verify failed: unable to get local issuer (_ssl.c:1108)></urlopen> urllib.error.URLError: <urlopen error [ssl: certificate_verify_failed] certificate verify failed: unable to get local issuer (_ssl.c:1076)< div><div id="text_translate"><p> 我在 python 代码中遇到证书错误,如下在 docker 容器laudio/pyodbc中运行</p><pre> File "/usr/local/lib/python3.7/site-packages/fredapi/fred.py", line 131, in get_series root = self.__fetch_data(url) File "/usr/local/lib/python3.7/site-packages/fredapi/fred.py", line 64, in __fetch_data response = urlopen(url) File "/usr/local/lib/python3.7/urllib/request.py", line 222, in urlopen return opener.open(url, data, timeout) File "/usr/local/lib/python3.7/urllib/request.py", line 525, in open response = self._open(req, data) File "/usr/local/lib/python3.7/urllib/request.py", line 543, in _open '_open', req) File "/usr/local/lib/python3.7/urllib/request.py", line 503, in _call_chain result = func(*args) File "/usr/local/lib/python3.7/urllib/request.py", line 1362, in https_open context=self._context, check_hostname=self._check_hostname) File "/usr/local/lib/python3.7/urllib/request.py", line 1321, in do_open raise URLError(err) urllib.error.URLError: &lt;urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1076)&gt;</pre><p> 我的证书是最新的</p><pre>root@8a03fe8175b7:/# pip install --upgrade certifi Requirement already up-to-date: certifi in /usr/local/lib/python3.7/site-packages (2020.4.5.1)</pre><p> 我也尝试使用没有帮助的<a href="https://stackoverflow.com/questions/15445981/how-do-i-disable-the-security-certificate-check-in-python-requests" rel="nofollow noreferrer">no_ssl_verification 解决方案</a>。</p><p> 另外,这个文件是空的,这意味着什么吗? 在我的主机上它已满</p><pre>root@2927b5836cfa:/# ls -alt /etc/ssl/certs/ca-certificates.crt -rw-r--r-- 1 root root 0 May 23 20:14 /etc/ssl/certs/ca-certificates.crt</pre><p> 来自容器中 python shell 的更多信息,我不知道这是否有帮助。 但是容器中没有 /export 目录:</p><pre> print(ssl.get_default_verify_paths()) DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/export/home/pb2/build/sb_0-35870562-1568195162.53/openssl-1.1.1d-el6-x86-64bit/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/export/home/pb2/build/sb_0-35870562-1568195162.53/openssl-1.1.1d-el6-x86-64bit/ssl/certs')</pre><p> 你能给我一些想法来解决这个问题吗?</p></div></urlopen>
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM