Python 检查 SSL 证书有效性教程
在 Python 中,可以使用ssl模块来验证证书的合法性。具体步骤如下:
-
导入
ssl模块:import ssl -
创建一个
SSLContext对象:context = ssl.create_default_context() -
设置验证模式为
CERT_REQUIRED,即需要验证证书:context.check_hostname = True -
调用
SSLContext对象的load_default_certs()方法加载默认的证书信任链:context.load_default_certs() -
创建一个
socket对象,并使用SSLContext对象进行包装:sock = context.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) -
使用
socket对象连接到目标主机:sock.connect(('hostname', port)) -
调用
getpeercert()方法获取服务器证书:cert = sock.getpeercert() -
调用
ssl模块的ssl.match_hostname()方法验证证书的主机名是否匹配:ssl.match_hostname(cert, 'hostname')
完整代码示例:
import socket
import ssl
context = ssl.create_default_context()
context.check_hostname = True
context.load_default_certs()
sock = context.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
sock.connect(('hostname', port))
cert = sock.getpeercert()
ssl.match_hostname(cert, 'hostname')
其中,hostname为目标主机的主机名,port为目标主机的端口号。如果证书合法,ssl.match_hostname()方法将不会抛出异常;如果证书不合法,将会抛出ssl.CertificateError异常。
原文地址: https://www.cveoy.top/t/topic/fPYF 著作权归作者所有。请勿转载和采集!