1、简介
X.509是被广泛使用的数字证书标准:是由国际电联电信委员会为单点登录和授权管理基础设施制定的PKI标准。
X.509定义了(但不仅限于)公钥证书、证书吊销清单、属性证书和证书路径验证算法等证书标准。
X.509数字证书:由用户公钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。
2、版本
1)X.509 v1:设定了一系列严格的CA分级体系来颁发数字证书。和其他网络信任模型对比,任何人,不仅仅是特定的CA,可以签发并验证其他密钥证书的有效性。
2)X.509 v2: 引入了主体和签发人唯一标识符的概念,以解决主体和/或签发人名称在一段时间后可能重复使用的问题。(未广泛使用)
3)X.509 v3 :增加支持扩展的概念,因此任何人均可定义扩展并将其纳入证书中。现在常用的扩展包括:KeyUsage(仅限密钥用于特殊目的,例如“只签”)和 AlternativeNames(允许其它标识与该公钥关联,例如 DNS 名、电子邮件地址、IP 地址)。扩展可标记为“极重要”,以表示应选中该扩展并强制执行或使用。(使用最广)
3、结构
4、编码
1)结构概述
X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN1语法进行编码。
ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:
类型标识(1字节) |
长度(1字节) |
值(不定长) |
结束标识(2字节) |
a、数据块数据类型标识(一个字节)
简单类型:不能再分解类型,如整型、比特串、字节串、对象标示符、日期型等。
结构类型:由简单类型和结构类型组合而成的,如顺序类型、选择类型、集合类型等。
b、数据块长度(1-128个字节)
若长度值小于等于127,则用一个字节表示,bit8 = 0, bit7-bit1 存放长度值;
若长度值大于127,则用多个字节表示,可以有2到127个字节。第一个字节的第8位为1,其它低7位给出后面该域使用的字节的数量,从该域第二个字节开始给出数据的长度,高位优先。
还有一种特殊情况,这个字节为0x80,表示数据块长度不定,由数据块结束标识结束数据块。
c、数据块的值
存放数据块的值,具体编码随数据块类型不同而不同。
d、数据块结束标识(可选)
结束标示字段,两个字节(0x0000),只有在长度值为不定时才会出现。
2)类型标识定义
bit7 |
bit6 |
bit5 |
bit4 |
bit3 |
bit2 |
bit1 |
bit0 |
标示 TAG 类型 |
结构体 |
类型的TAG值 |
a、Bit7-bit6用来标示TAG类型
(00) universal:普通类型,如:
BOOLEAN [有两个值:false或true]
INTEGER [整型值]
BIT STRING [0位或多位]
(01) application:
(10) context-specific: 特殊内容, bit4-bit0的值含义如下:
[0] –- 表示证书的版本
[1] –- issuerUniqueID,表示证书发行者的唯一id
[2] –- subjectUniqueID,表示证书主体的唯一id
[3] –- 表示证书的扩展字段
(11) private:
b、Bit5表示是否为结构类型
1是结构类型,0是简单类型。
c、Bit4-bit0是类型的TAG值
根据bit7-bit6的不同值有不同的含义
5、文件格式
1).cer/.crt是用于存放证书,以二进制形式存放,不含私钥
2).pem跟.crt/.cer的区别是它以Ascii来表示,可以用于存放证书或私钥。
3).pfx/.p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。
4).p10是证书请求。
5).p7r是CA对证书请求的回复,只用于导入
6).p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。
6、openssl创建根证书
1)创建根证私钥
openssl genrsa -out root-key.key 1024
2)创建根证书请求文件
openssl req -new -out root-req.csr -key root-key.key -keyform PEM
3)自签根证书
openssl x509 -req -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650
重要说明: -extfile /etc/pki/tls/openssl.cnf -extensions v3_req 参数是生成 X509 V3 版本的证书的必要条件。 /etc/pki/tls/openssl.cnf 是系统自带的OpenSSL配置文件,该配置文件默认开启 X509 V3 格式。
4) 导出p12格式根证书
openssl pkcs12 -export -clcerts -in root-cert.cer -inkey root-key.key -out root.p12
7、openssl颁发证书
1)生成客户端key
openssl genrsa -out client-key.key 1024
openssl req -new -out client-req.csr -key client-key.key
3)生成客户端证书,使用根证书签名
openssl x509 -req -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days 3650
4)生成客户端p12格式根证书
openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12
原文地址:https://www.jb51.cc/wenti/3288640.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。