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

解析验证X509证书的信息


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

后缀    作用

cer/crt    用于存放证书,它是2进制形式存放的,不含私钥

pem    以Ascii来表示,可以用于存放证书或私钥。

pfx/p12    用于存放个人证书/私钥,他通常包含保护密码,2进制方式。

p10    证书请求

p7r    CA对证书请求的回复,只用于导入

p7b    以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。




import

OpenSSL

importtime

fromdateutilimportparser

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  : 国名")

foritemincertIssue.get_components():

print(item[0].decode("utf-8"),"  ——  ",item[1].decode("utf-8"))

print(cert.get_extension_count())

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。