[英]ssl.SSLCertVerificationError: certificate verify failed: unable to get local issuer certificate (_ssl.c:1108)
[英]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官方文档,但很少。 我的基本步骤:
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
必须包含受信任的根 CA和CRL。 但诚然,这种 API 很奇怪,文档也没有真正的帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.