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

常见的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())

猜你喜欢

转载自blog.csdn.net/xuq09/article/details/87707583