您想要的摘要答案:
- Issuer字段是一个 DN,它标识谁签署了证书。
- DN(专有名称)是那些古怪的“C=US,O=HAL,OU=Discovery One,CN=Dave Bowman”字符串之一
- 但是,只有当您在本地受信任的根中时,拥有正确的名称才重要!
但是对于您的主要问题-中级证书无需更改即可引用新更新的根证书。可以为根颁发新证书,而不会使旧证书无效或断开与中间证书的链接。“颁发者”是一个字符串,而不是序列号,因此正确放置在受信任存储区中的根证书的同名重新颁发可以延长原始证书的到期时间。
上个月我遇到了一个这样的案例;我有一个由 Entrust L1C 中间证书签名的证书,该证书又由 CN=Entrust.net 证书颁发机构 (2048) 签名。直到最近,该根证书的副本如下:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 946059622 (0x3863b966)
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
Validity
Not Before: Dec 24 17:50:51 1999 GMT
Not After : Dec 24 18:20:51 2019 GMT
Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
在 1 月下旬的操作系统升级期间,根证书悄悄地被更新的版本取代。请注意,序列号和有效日期会发生变化,但 Issuer 字符串不会:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 946069240 (0x3863def8)
Signature Algorithm: sha1WithRSAEncryption
Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
Validity
Not Before: Dec 24 17:50:51 1999 GMT
Not After : Jul 24 14:15:12 2029 GMT
Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048)
给定这两个不同的根文件,openssl 使用其中一个正确验证了证书链:
$ md5sum entrust.*.pem
da9ff9cd8e8e2256e9efcf5c4ef3891f entrust.L1C.pem
244f3bbf6b112e7d399342c097db22a5 entrust.new.root.pem
0315b2915a0f74cc3498cfdd54933452 entrust.old.root.pem
$ openssl verify -CAfile entrust.old.root.pem entrust.L1C.pem
entrust.L1C.pem: OK
$ openssl verify -CAfile entrust.new.root.pem entrust.L1C.pem
entrust.L1C.pem: OK
$
对于奖励积分:
TLS 握手通常是这样开始的:
C -> S客户端你好
S -> C服务器你好
S -> C服务器证书
并且证书是从最具体的-> 中间-> 根以流的形式发送的。实际上,您可以从 Wireshark 之类的嗅探器中获取字节并将它们保存到文件中,并将它们视为 .der(二进制编码证书)。为了方便起见,我使用上面的证书做到了这一点,并使用 openssl 将它们从 .der 转换为 .pem。