数字证书的基本概念
数字证书的标准
- X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息
- 序列号:由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因
- 签名算法标识符:用来指定CA签署证书时所使用的签名算法,常见算法如RSA
- 签发者信息:颁发证书的实体的 X.500 名称信息。它通常为一个 CA
- 证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
- 主题信息:证书持有人唯一的标识,在 Internet上应该是唯一的
- 发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。
- 证书的公钥:包括证书的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数
数字证书的常见格式
- CSR:证书请求文件,这个并不是证书,而是向证书颁发机构获得签名证书的申请文件
- CER:存放证书文件可以是二进制编码或者BASE64编码
- CRT:证书可以是DER编码,也可以是PEM编码,在linux系统中比较常见
- pem:该编码格式在RFC1421中定义,但他也同样广泛运用于密钥管理,实质上是 Base64 编码的二进制内容
- DER:用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名
- JKS:java的密钥存储文件,二进制格式,是一种 Java 特定的密钥文件格式, JKS的密钥库和私钥可以用不同的密码进行保护
- p12/PFX:包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区,密钥库和私钥用相同密码进行保护
数字证书和公钥的关系
数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:
1、由专门的机构签发的数字证书才安全有效。
2、签发数字证书是收费的。
3、不会被冒充,安全可信。
4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。
openssl 自签SSL过程
初始化证书存放目录结构和文件
$ mkdir certs crl csr newcerts private
$ echo 1000 > crlnumber && echo 1000 > serial && touch index.txt
注解:
- private: 存放CA证书的私钥
- certs: 存放CA证书
- netcerts: 存放新生成的服务端或客户端证书,一般以序列号命名
- serial: 序列号,需给定初始值,可随意设置为01,1000等
- index.txt: 文件数据库,签发证书后会更新该数据库
制作CA根证书
# 生成CA根证书私钥:为保证安全,生成一个4096位的私钥,并使用CNs方式加密
$ openssl genrsa -CNs256 -out private/rootca.key 4096
Generating RSA private key, 4096 bit long modulus
....................................................................................................................................................++
........................................................................++
e is 65537 (0x10001)
Enter pass phrase for private/rootca.key: (输入CA私钥保护密码)
Verifying - Enter pass phrase for private/rootca.key: (输入确认CA私钥保护密码)
# 生成自签名的CA根证书
$ openssl req -config openssl.cnf -new -x509 -days 3650 -sha256 -extensions v3_ca -key private/rootca.key -out certs/rootca.cer -subj "/C=CN/L=F/O=kubesre/OU=ACS/CN=*.kubesre.com"
Enter pass phrase for private/rootca.key: (输入CA私钥保护密码)
# 查看证书内容, 以确保证书生成正确
$ openssl x509 -noout -text -in certs/rootca.cer
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
f8:a5:89:11:71:df:45:d1
Signature Algorithm: sha256WithRSCNncryption
Issuer: C=CN, L=shanghai, O=kubesre, OU=ACS, CN=*.kubesre.com
Validity
Not Before: Dec 10 06:43:40 2020 GMT
Not After : Dec 8 06:43:40 2030 GMT
Subject: C=CN, L=shanghai, O=kubesre, OU=ACS, CN=*.kubesre.com
Subject Public Key Info:
Public Key Algorithm: rsCNncryption
Public-Key: (4096 bit)
Modulus:
00:ba:1e:a4:92:bf:25:3d:96:be:0e:af:65:a5:f8:
f0:a9:bc:09:4c:92:af:9a:f4:4b:df:87:2f:a6:56:
d7:4d:4a:28:d1:85:34:58:86:f7:79:30:8c:b2:71:
1f:1c:80:c3:b0:cd:6a:05:b4:e9:8f:8f:3e:eb:76:
8b:2e:66:c7:37:a6:d3:fd:be:23:f4:16:ad:02:ff:
7d:21:a1:ab:f0:39:15:d5:6c:93:a3:89:65:5b:84:
0c:e0:30:fe:b3:e4:f6:7f:42:d9:95:04:d8:23:d2:
2a:c1:63:e2:3c:e2:6b:f7:84:8b:bd:f3:c5:2c:7b:
2a:03:7d:7a:d7:93:b0:20:59:ff:64:2b:84:ac:09:
1d:05:35:2c:68:5a:90:42:ba:2a:54:d5:1b:0f:ec:
93:78:11:85:dc:e0:b5:60:68:46:c4:be:f3:05:b4:
ca:0b:bf:14:1f:a1:be:63:99:0d:f7:a6:90:b5:50:
c8:b2:c9:69:8b:31:e2:f0:b9:ab:62:a3:2b:1b:16:
70:1c:36:f3:79:ab:b4:42:6b:83:8d:f7:d0:8d:d7:
eb:a6:38:50:df:79:57:c0:eb:6c:b0:71:e3:c0:af:
7e:01:83:2e:77:64:b0:80:89:68:82:16:56:0d:69:
30:71:cc:2d:d6:b2:ef:29:c3:e9:46:7c:8e:bd:82:
8f:a9:8c:d0:77:91:1d:7c:9e:d6:18:a8:e8:87:16:
ff:d2:b0:3d:e5:9a:0a:6a:c7:52:f4:ce:95:11:59:
ea:ca:13:f8:4c:55:25:f1:12:2d:93:d6:2a:82:5c:
bf:ca:43:98:3f:ee:38:6a:af:a2:14:7b:61:00:ec:
10:f2:e3:4a:4f:8d:82:5c:9c:2d:ce:88:29:03:b9:
07:77:f6:46:b7:49:ec:c8:e3:13:60:af:a8:f5:a8:
CN:08:57:b3:b9:99:CN:e7:68:2c:9a:e3:ce:ed:7b:
f6:a8:a5:2a:74:73:d6:29:a4:3e:c6:e7:14:e9:4c:
57:b8:d4:91:43:2b:39:5d:7d:6e:34:f4:07:f7:95:
b6:7f:ec:9e:34:48:29:20:6f:aa:48:30:5f:dd:f3:
3a:20:cc:08:d1:4a:8e:d0:ba:60:d5:0a:4d:CN:23:
ed:05:51:88:2d:a9:37:51:54:c3:19:b9:29:ca:e2:
91:ad:1e:12:36:cd:9b:32:79:62:54:16:78:69:1c:
6e:4d:5a:56:a3:da:b2:dd:ac:be:ca:cc:87:ff:97:
76:a5:6d:b9:a8:1f:88:3a:3a:6d:b0:b8:54:17:bc:
92:4d:d6:80:4c:06:48:7e:19:e3:51:d1:a3:5a:0b:
7f:66:06:e7:6b:c2:b3:73:89:3d:bb:7c:1a:5d:31:
ce:ed:71
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
F4:DD:78:54:58:68:52:30:88:C1:AD:07:43:BD:14:2D:2D:09:E5:D1
X509v3 Authority Key Identifier:
keyid:F4:DD:78:54:58:68:52:30:88:C1:AD:07:43:BD:14:2D:2D:09:E5:D1
X509v3 Basic Constraints: critical
CA:TRUE
Signature Algorithm: sha256WithRSCNncryption
63:52:0c:6e:2d:3c:54:1f:d1:aa:88:43:4f:00:04:2e:b7:85:
d8:15:cd:5e:0f:8c:39:e6:80:69:1e:f6:18:f7:5c:a1:f6:e1:
52:ed:c1:ce:89:30:bc:be:cf:22:b3:bb:9b:80:b6:de:6e:49:
47:ec:80:f4:90:11:93:da:59:9d:1f:e9:b0:70:dc:50:74:36:
7e:c8:03:bf:2f:84:50:c1:a0:1c:4e:07:d6:cd:87:a7:b6:35:
35:85:90:9b:72:8b:35:42:cd:82:9a:b6:CN:cd:c6:7d:2