openssl 介绍这里不做过多赘述,可以搜到很多相关资料。本文提供python 使用OpenSSL解析证书的方法。
OpenSSL 解析certificate 证书
import OpenSSL
import OpenSSL.crypto
from OpenSSL.crypto import X509
from dateutil import parser
cp = OpenSSL.crypto
EC = cp.TYPE_EC # 408
RSA = cp.TYPE_RSA # 6
DH = cp.TYPE_DH # 28
DSA = cp.TYPE_DSA # 116
def analytical_certificate(cert_str=None, cert_paths=None):
try:
if cert_str:
cert_content: X509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert_str)
elif cert_paths:
cert_content: X509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, open(cert_paths).read())
cert_issuer = cert_content.get_issuer()
cert_subject = cert_content.get_subject()
extension_count = cert_content.get_extension_count()
extension_ls = []
for i in range(extension_count):
extension = str(cert_content.get_extension(i))
print(f"extension[{
i}]:{
extension}")
extension_ls.append(extension)
_cert_info = {
"version": cert_content.get_version() + 1,
"serial_number": hex(cert_content.get_serial_number()),
"signature_algorithm": cert_content.get_signature_algorithm().decode("UTF-8"),
"common_name": cert_issuer.commonName,
"start_time": parser.parse(cert_content.get_notBefore().decode("UTF-8")).strftime('%Y%m%d%H%M%S'),
"format_start_time": parser.parse(cert_content.get_notBefore().decode("UTF-8")).strftime('%Y-%m-%d %H:%M:%S'),
"end_time": parser.parse(cert_content.get_notAfter().decode("UTF-8")).strftime('%Y%m%d%H%M%S'),
"format_end_time":<