在Python3.4中,verify_flags,通过将其设置为VERIFY_CRL_CHECK_LEAF或{},可用来检查证书是否已根据CRL被吊销。在
我写了一个简单的测试程序。但在我的系统中,这个脚本无法验证任何连接,即使它完全有效。在import ssl
import socket
def tlscheck(domain, port):
addr = domain
ctx = ssl.create_default_context()
ctx.options &= ssl.CERT_REQUIRED
ctx.verify_flags = ssl.VERIFY_CRL_CHECK_LEAF
ctx.check_hostname = True
#ctx.load_default_certs()
#ctx.set_default_verify_paths()
#ctx.load_verify_locations(cafile="/etc/ssl/certs/ca-certificates.crt")
sock = ctx.wrap_socket(socket.socket(), server_hostname=addr)
sock.connect((addr, port))
import pprint
print("TLS Ceritificate:")
pprint.pprint(sock.getpeercert())
print("TLS Version:", sock.version())
print("TLS Cipher:", sock.cipher()[0])
exit()
tlscheck("stackoverflow.com", 443)
我的代码总是以ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)退出。在
首先,我怀疑证书数据库没有正确加载。但是在我尝试了load_default_certs(),set_default_verify_paths(),load_verify_locations(cafile="/etc/ssl/certs/ca-certificates.crt")之后,它们都没有起作用。在
另外,ctx.options &= ssl.CERT_REQUIRED工作正常,它可以判断证书链是否可信。但不是针对CRL。。。这也表明我的CA是正确的。在
我知道“/etc/ssl/certs/ca-证书.crt“包含有效的CA。有什么问题吗?在