欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用Python Openssl库解析X509证书信息

程序员文章站 2022-03-06 18:57:28
...

常见的X.509证书格式包括:

后缀    作用
cer/crt    用于存放证书,它是2进制形式存放的,不含私钥
pem    以Ascii来表示,可以用于存放证书或私钥。
pfx/p12    用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
p10    证书请求
p7r    CA对证书请求的回复,只用于导入
p7b    以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
 

 

import OpenSSL
import time
from dateutil import parser

cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, open("test.cer").read())
certIssue = cert.get_issuer()

print ("证书版本:            ",cert.get_version() + 1)

print ("证书***:          ",hex(cert.get_serial_number()))

print ("证书中使用的签名算法: ",cert.get_signature_algorithm().decode("UTF-8"))

print ("颁发者:              ",certIssue.commonName)

datetime_struct = parser.parse(cert.get_notBefore().decode("UTF-8"))

print ("有效期从:             ",datetime_struct.strftime('%Y-%m-%d %H:%M:%S'))

datetime_struct = parser.parse(cert.get_notAfter().decode("UTF-8"))

print ("到:                   ",datetime_struct.strftime('%Y-%m-%d %H:%M:%S'))

print ("证书是否已经过期:      ",cert.has_expired())

print("公钥长度" ,cert.get_pubkey().bits())

print("公钥:\n" ,OpenSSL.crypto.dump_publickey(OpenSSL.crypto.FILETYPE_PEM, cert.get_pubkey()).decode("utf-8"))

print("主体信息:")

print("CN : 通用名称  OU : 机构单元名称")
print("O  : 机构名    L  : 地理位置")
print("S  : 州/省名   C  : 国名")

for item in certIssue.get_components():
    print(item[0].decode("utf-8"), "  ——  ",item[1].decode("utf-8"))

print(cert.get_extension_count())