数字证书 X509详解 python解析SSL证书
数字证书
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构-----CA机构,又称为证书授权,(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
X.509信息
X.509 标准规定了证书可以包含什么信息,并说明了记录信息的方法(数据格式)。除了签名外,所有 X.509 证书还包含以下数据:
名称 | 含义 |
---|---|
版本 | 识别用于该证书的 X.509 标准的版本,这可以影响证书中所能指定的信息。迄今为止,已定义的版本有三个。 |
序列号 | 发放证书的实体有责任为证书指定序列号,以使其区别于该实体发放的其它证书。此信息用途很多。例如,如果某一证书被撤消,其序列号将放到证书撤消清单 (CRL) 中。 |
签名算法标识符 | 用于识别 CA 签写证书时所用的算法。 |
签发人姓名 | 签写证书的实体的 X.500 名称。它通常为一个 CA。 使用该证书意味着信任签写该证书的实体(注意:有些情况下(例如根或顶层 CA 证书),签发人会签写自己的证书)。 |
有效期 | 每个证书均只能在一个有限的时间段内有效。该有效期以起始日期和时间及终止日期和时间表示,可以短至几秒或长至一世纪。所选有效期取决于许多因素,例如用于签写证书的私钥的使用频率及愿为证书支付的金钱等。它是在没有危及相关私钥的条件下,实体可以依赖公钥值的预计时间。 |
主体名 |
证书可以识别其公钥的实体名。此名称使用 X.500 标准,因此在Internet中应是唯一的。它是实体的特征名 (DN),例如, CN=Java Duke,OU=Java Software Division,O=Sun Microsystems Inc,C=US (这些指主体的通用名、组织单位、组织和国家)。 |
主体公钥信息 | 这是被命名实体的公钥,同时包括指定该密钥所属公钥密码系统的算法标识符及所有相关的密钥参数。 |
成员 | 格式 |
---|---|
版本号 | INTEGER |
序列号 | INTEGER |
签名算法 | OBJECT |
颁发者 | SET |
有效期 | UTC_TIME |
主体 | SET |
主体公钥 | BIT_STRING |
主体公钥算法 | OBJECT |
签名值 | BIT_STRING |
常见的X.509证书格式包括:
cer/crt是用于存放证书,它是2进制形式存放的,不含私钥。
pem跟crt/cer的区别是它以Ascii来表示,可以用于存放证书或私钥。
pfx/p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
p10是证书请求。
p7r是CA对证书请求的回复,只用于导入
p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
X.509证书数据结构:
Certificate ::= SEQUENCE {tbsCertificate TBSCertificate, -- 证书主体signatureAlgorithm AlgorithmIdentifier, -- 证书签名算法标识signatureValue BIT STRING --证书签名值,是使用signatureAlgorithm部分指定的签名算法对tbsCertificate证书主题部分签名后的值.}TBSCertificate ::= SEQUENCE {version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号serialNumber CertificateSerialNumber, -- 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书signature AlgorithmIdentifier, --证书签名算法标识issuer Name, --证书发行者名称validity Validity, --证书有效期subject Name, --证书主体名称subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书发行者ID(可选),只在证书版本2、3中才有subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书主体ID(可选),只在证书版本2、3中才有extensions [3] EXPLICIT Extensions OPTIONAL-- 证书扩展段(可选),只在证书版本3中才有}Version ::= INTEGER { v1(0), v2(1), v3(2) }CertificateSerialNumber ::= INTEGERAlgorithmIdentifier ::= SEQUENCE {algorithm OBJECT IDENTIFIER,parameters ANY DEFINED BY algorithm OPTIONAL }parameters:Dss-Parms ::= SEQUENCE { -- parameters ,DSA(DSS)算法时的parameters,RSA算法没有此参数p INTEGER,q INTEGER,g INTEGER }signatureValue:Dss-Sig-Value ::= SEQUENCE { -- sha1DSA签名算法时,签名值r INTEGER,s INTEGER }Name ::= CHOICE {RDNSequence }RDNSequence ::= SEQUENCE OF RelativeDistinguishedNameRelativeDistinguishedName ::=SET OF AttributeTypeAndValueAttributeTypeAndValue ::= SEQUENCE {type AttributeType,value AttributeValue }AttributeType ::= OBJECT IDENTIFIERAttributeValue ::= ANY DEFINED BY AttributeTypeValidity ::= SEQUENCE {notBefore Time, -- 证书有效期起始时间notAfter Time -- 证书有效期终止时间}Time ::= CHOICE {utcTime UTCTime,generalTime GeneralizedTime }UniqueIdentifier ::= BIT STRINGSubjectPublicKeyInfo ::= SEQUENCE {algorithm AlgorithmIdentifier, -- 公钥算法subjectPublicKey BIT STRING -- 公钥值}subjectPublicKey:RSAPublicKey ::= SEQUENCE { -- RSA算法时的公钥值modulus INTEGER, -- npublicExponent INTEGER -- e -- }Extensions ::= SEQUENCE SIZE (1..MAX) OF ExtensionExtension ::= SEQUENCE {extnID OBJECT IDENTIFIER,critical BOOLEAN DEFAULT FALSE,extnValue OCTET STRING }
python解析X509证书
导入对应的包
import ssl
import OpenSSL
from dateutil import parser
获取证书返回信息
resp=ssl.get_server_certificate(('www.qq.com', 443))
解析证书信息
x509 =OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM,resp )
解析具体数据
issuer=x509.get_issuer() #获取证书发行者名称
time1=parser.parse(x509.get_notBefore().decode("UTF-8")) #获取证书发放时间
对应函数
'get_issuer', 证书发行者名称"CN : 通用名称 OU : 机构单元名称""O : 机构名 L : 地理位置""S : 州/省名 C : 国名"'get_notAfter', 证书有效期终止时间'get_notBefore', 证书有效期终止时间'get_pubkey', 证书公钥值'get_serial_number', 证书序列号,对同一CA所颁发的证书,序列号唯一标识证书'get_signature_algorithm', 证书签名算法标识'get_subject', 证书主体名称'get_version', 证书版本'has_expired', 证书是否已经过期'gmtime_adj_notAfter','gmtime_adj_notBefore','set_issuer','set_notAfter','set_notBefore','set_pubkey','set_serial_number','set_subject','set_version','sign','subject_name_hash','to_cryptography'
数字证书 X509详解 python解析SSL证书相关推荐
- python正则匹配空格+数字+空格_详解Python中正则匹配TAB及空格的小技巧
详解Python中正则匹配TAB及空格的小技巧 发布时间:2020-10-15 08:38:48 来源:脚本之家 阅读:94 作者:杰瑞26 在正则中,使用.*可以匹配所有字符,其中.代表除\n外的任 ...
- Docker安装emqx详解(配置SSL证书、开启WSS、鉴权)
EMQX 是一款大规模可弹性伸缩的云原生分布式物联网 MQTT 消息服务器. 1 端口介绍 1883:MQTT 协议端口 8084:MQTT/SSL 端口 8083:MQTT/WebSocket 端口 ...
- python识别数字程序_详解python实现识别手写MNIST数字集的程序
我们需要做的第⼀件事情是获取 MNIST 数据.如果你是⼀个 git ⽤⼾,那么你能够通过克隆这本书的代码仓库获得数据,实现我们的⽹络来分类数字 git clone https://github.co ...
- python随机生成数字列表_详解Python利用random生成一个列表内的随机数
首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range(1,34)) print得到一系列随机数,执行一次得到 ...
- python 指定证书验证_使用Python验证SSL证书
从2.7.9 / 3.4.3版开始,Python 默认会尝试执行证书验证. 这在PEP 467中已提出,值得一读:https : //www.python.org/dev/peps/pep-0476/ ...
- x.509数字证书编码详解
转自:http://blog.sina.com.cn/s/blog_49b531af0102eahs.html x.509数字证书编码详解 一. X.509数字证书的编码 X.509证书的结构是用AS ...
- python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...
- Python Tkinter——数字拼图游戏详解版
Python Tkinter 实践系列--数字拼图游戏详解版 import random #Python中的random是一个标准库用于生成随机数.随机整数.还有随机从数据集取数据. import t ...
- python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...
文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...
最新文章
- Vcastr 2.2 flv 网络播放器 参数设置
- 【Linux shell】sed实践(2)
- 数据库连接工具HeidiSql介绍(支持MySQL,MariaDB,Microsoft SQL或PostgreSQL)
- Java 泛型总结(三):通配符的使用
- 通过 pxe(网络安装)完成centos 系统的网络安装
- oracle的文件后缀名,转:数据文件的扩展名是ora,dbf,dat的,有什么区别?
- Xuggler视频处理简介
- 使用Moles对静态方法做UnitTest
- hdu 1398 Square Coins/hdu 1028 Ignatius and the Princess III
- vscode的sftp插件同步失败no such file的问题
- 【C#】通过正则表达式对TextBox进行校验
- 渗透测试PTES标准流程(超详细)
- 【5G】5GC网元服务及对应消息
- 前端基础——做相册、诗词
- Zabbix以trapper方式监控MySQL备份文件
- Oracle Cloud(甲骨文)开启root登录
- 一个正经的前端学习 开源 仓库(阶段十五)
- 考虑人机协同的智能工厂多AGV物流调度仿真研究
- zend studio 9 字体,颜色,自动格式化文件相关设置
- 计算一年有多少个周 每个周的开始日期和结束日期是什么