Skip to main content
 首页 » 编程设计

python之如何在python中提取x509

2025年05月04日16softidea

我有以下脚本。它连接到 TLS 服务器并提取一些 X509 数据,例如有效日期和公钥。我有以下脚本:

import socket, ssl 
import OpenSSL 
 
hostname='www.google.com' 
port=443 
 
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) 
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
ssl_sock = context.wrap_socket(s, server_hostname=hostname) 
ssl_sock.connect((hostname, port)) 
ssl_sock.close() 
print("ssl connection Done") 
 
cert = ssl.get_server_certificate((hostname, port)) 
# OpenSSL 
x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert) 
pk = x509.get_pubkey() 
print(x509.get_notAfter()) 
print(x509.get_notBefore()) 
print(pk) 

问题是有效日期和公钥以不可读的格式返回。如何解决这个问题?即获取日期格式的有效性和十六进制格式的公钥?

另外,如何将证书文件保存到本地磁盘以供引用?

编辑: 这是我得到的输出:

b'20170223141600Z'  
b'20161201141600Z'  
<OpenSSL.crypto.PKey object at 0x0000019EBFDF73C8> 

请您参考如下方法:

返回的日期是 YYYYMMDDHHMM 格式的日期。您可以使用以下方法将其转换为日期时间对象:

datetime.strptime(x509.get_notAfter().decode('ascii'), '%Y%m%d%H%M%SZ')