共计 4295 个字符,预计需要花费 11 分钟才能阅读完成。
什么是数字证书?
数字证书是证书颁发机构(Certificate Authority)签发的用于验证身份的一个文件。
数字证书的结构
可以使用 openssl x509 -text -in segmentfalut.cer
命令查看证书内容。如下是 segmentfault 证书的内容。
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
20:d5:e6:44:7b:aa:49:63:0e:34:4f:3e:9b:9b:3e:cf:bf:33:25:58
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=cn, ST=GuangDong, L=Shenzhen, O=Huawei,
OU=IT, CN=Huawei Web Secure Internet Gateway CA
Validity
Not Before: Nov 17 02:41:13 2019 GMT
Not After : Nov 16 02:41:13 2020 GMT
Subject: C=CN, L=\xE6\x9D\xAD\xE5\xB7\x9E, O=\xE6\x9D\xAD\xE5\xB7\x9E\
xE5\xA0\x86\xE6\xA0\x88\xE7\xA7\x91\xE6\x8A\x80\xE6\x9C\x89\xE9\x99\x90\
xE5\x85\xAC\xE5\x8F\xB8, CN=segmentfault.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:bc:e7:b0:b1:35:9e:d9:cb:1d:21:59:49:73:49:
33:32:fa:b4:f8:33:c4:16:05:0f:aa:0a:ba:73:98:
d5:4b:3d:df:64:0e:47:ff:8d:6d:ab:05:8e:e7:be:
85:4e:dd:2c:e3:f5:76:e6:d4:11:5e:ac:c9:b0:02:
1d:ef:00:be:b4:0c:9d:c9:a8:c5:da:77:6b:57:b9:
5f:c2:b9:e1:40:d3:2c:f6:15:55:b8:44:18:0c:a9:
c6:d7:28:2d:ae:66:a9:b7:e9:2a:df:e2:38:67:1f:
5a:de:e6:7b:0a:b5:00:8f:66:c3:22:cc:53:55:c2:
3b:da:8d:19:ed:89:c5:96:b4:20:de:76:0d:3e:c1:
36:b2:e5:43:ac:26:82:59:89:28:c3:9d:ae:86:d0:
47:aa:aa:0c:63:10:50:33:96:60:c5:e2:9a:c5:32:
09:6c:10:41:8e:c0:5b:9b:d1:6c:35:69:09:91:fd:
16:bb:c4:1f:45:89:f3:f5:d1:9c:b7:40:5d:da:9e:
53:19:10:fd:e6:40:df:17:f1:1b:ca:b9:8c:1e:13:
f2:70:d9:31:07:4b:b1:38:05:9e:e1:9a:3a:c1:14:
b3:16:90:a4:8c:25:b8:1f:93:59:e3:90:6d:d6:5a:
99:13:dc:b5:2c:9d:19:26:9b:90:62:72:b1:c8:e5:
4e:77
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
53:0D:E1:14:B6:42:B9:CD:15:F6:DE:99:F7:FB:27:B3:B8:AC:76:91
X509v3 Authority Key Identifier:
keyid:30:7A:0D:96:57:E0:09:BE:8A:C0:A8:6B:8F:1E:E1:97:6B:01:7A:6C
DirName:/C=cn/ST=GuangDong/L=Shenzhen/O=Huawei/OU=IT/CN=Huawei Web
Secure Internet Gateway CA
serial:B4:0F:3B:D5:F1:14:56:66
X509v3 Key Usage:
Digital Signature, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:*.segmentfault.com, DNS:segmentfault.com
X509v3 CRL Distribution Points:
Full Name:
URI:http://crl.mwginternal.com/crl/
com.scur.engine.sslclientcontext.4585/
f377a43cf3b98fcce412fcf3bbcfe830740f8c16/crl.crl
Authority Information Access:
OCSP - URI:http://ocsp.mwginternal.com/ocsp/com.scur.engine.sslclientcontext.4585/
f377a43cf3b98fcce412fcf3bbcfe830740f8c16
Signature Algorithm: sha256WithRSAEncryption
1d:04:79:fa:80:f1:32:2c:a9:4f:90:e6:1e:96:ac:4b:c8:62:
5b:e3:e7:6d:73:45:61:32:90:32:fe:d1:2f:0e:d2:d7:e2:63:
7b:6c:0b:79:c2:a7:30:68:41:27:3e:21:a8:cc:d7:4c:29:0b:
8d:f7:00:8b:39:ff:68:5f:63:52:49:0a:40:87:f7:94:1d:5d:
28:a2:09:c3:42:55:4d:db:25:5d:e0:91:34:21:b6:93:34:33:
7a:2a:18:02:0a:fa:53:e6:0d:31:e7:cb:9c:23:f4:03:74:31:
e9:92:f9:b2:05:a2:0a:d5:13:86:ac:cf:00:0e:b6:de:a9:6f:
96:7d:47:dd:42:aa:63:58:bd:3e:9d:3a:9d:3f:a6:b6:48:77:
86:f2:3f:78:44:af:94:c8:54:f5:c2:56:37:71:4b:c7:16:c5:
8f:0f:43:23:39:1d:5b:db:f2:f2:1d:de:d5:4d:6f:c5:c6:0c:
8e:52:4f:16:7c:ef:74:eb:61:cc:d4:9d:6d:a2:62:92:76:1a:
ba:b2:98:72:bc:7a:5b:58:66:62:97:7e:39:7b:d0:dd:74:54:
1a:04:cb:a6:a1:31:9a:4d:52:a5:41:fb:2f:bc:8c:24:74:96:
bf:17:77:7d:34:69:c4:3b:04:2f:33:4c:4e:5c:68:10:f3:68:
ce:14:6e:4b
X.509 是一种通用的证书格式,所有证书都符合 ITU-T X.509 国际标准。X.509 证书包含常规部分和扩展部分。
常规部分:
1. 版本号
2. 序列号
3. 签名算法标识符
4. 认证机构的数字签名
5. 认证机构
6. 有效期限
7. 主题信息
8. 公钥信息
9. 颁发者唯一标识符(可选项)
扩展部分:
1. 发行者密钥标识符
2. 密钥使用
3. CRL(Certificate Revocation List)分布点 指定了可以获取 CRL 信息的地点
4. 私钥的使用期
5. 证书策略
6. 策略映射
7. 主体别名
8. 颁发者别名
9. 主体目录属性
数字证书的制作过程
使用 openssl 制作数字证书的过程中会使用到三种文件类型,分别是以.key,.csr,.crt 为后缀。
.key 文件是私钥文件。
.csr(Certificate Signing Request)文件是证书签名请求文件。这个文件只用在请求证书颁发机构生成数字证书的过程。csr 文件包含了公钥和标识名称。
可以通过 openssl req -noout -text -in csr_name.csr 查看 csr 文件的内容
.crt 是最终生成的数字证书
使用数字证书如何确保通信过程安全?
在理解数字证书是如何保证通信过程安全之前,我们需要先了解 https 通信过程 是怎么样的。
- Client 发送 https 请求到 Server
- Server 发送自己的数字证书给 Client
- Client 使用数字证书中的公钥加密内容发送给 Server,Server 使用私钥解密 Client 发送的内容;Server 使用私钥加密内容发送给 Client,Client 使用公钥解密 Server 发送的数据。
在 Client 与 Server 传递数据之前,需要先验证数字证书是否可靠,涉及到两点:
- 证书是否合法的且没有被篡改的
要证明 Server 发送过来的数字证书没有被篡改,首先需要使用 CA 的公钥对 Server 发送过来的证书密文进行解密。解密之后,对解密得到的信息使用摘要算法求职,再将求得的值与 CA 给的证书中的数字签名进行比较。
要证明证书是否合法,需要使用证书的上级证书进行验证。浏览器内置了许多 CA 的根证书,如果没有需要的根证书,需要自己导入。 - 证书是否在有效期内
- 证书是否被吊销了
要确定证书是否已经被吊销了,有 CRL 分发点和 OCSP(Online Certificate Status Protocol)两种方式。由于 CRL 分发点这种方式需要先下载文件,延迟比较大,所以现在更通用的方式是使用 OCSP。
在 Client 与 Server 传递数据的过程中,使用公私钥加密的方式确保数据是正确的。
其中摘要算法是为了保证内容不被篡改。它的实现原理是在数据发送之前对数据使用摘要算法得到一段固定长度的字符串,这段字符串也叫做数字签名。在服务端接收到数据之后,使用同样的摘要算法对数据进行计算得到一段字符串,如果两段字符串相同,则意味着这是内容没有被修改过。
正文完