SSL 证书 - OpenSSL 与浏览器之间的证书链不同

SSL 证书 - OpenSSL 与浏览器之间的证书链不同

今天,我注意到 OpenSSL 和浏览器(Firefox、Chrome)为网站提供了不同的证书链。OpenSSL 显示来自“GTE Cyber​​Trust Global Root”的根证书,而 Firefox 和 Chrome 显示“Baltimore Cyber​​Trust Root”的根证书。以下是运行“openssl”后输出的证书链:

openssl s_client -connect "WEBSITE.com:443"  -servername WEBSITE.com
...
...
Certificate chain
 0 s:/C=US/ST=NY/L=New York/O=Company/OU=Company/CN=*.WEBSITE.com
   i:/C=NL/L=Amsterdam/O=Verizon Enterprise Solutions/OU=Cybertrust/CN=Verizon Akamai SureServer CA G14-SHA2
 1 s:/C=NL/L=Amsterdam/O=Verizon Enterprise Solutions/OU=Cybertrust/CN=Verizon Akamai SureServer CA G14-SHA2
   i:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
 2 s:/C=IE/O=Baltimore/OU=CyberTrust/CN=Baltimore CyberTrust Root
   i:/C=US/O=GTE Corporation/OU=GTE CyberTrust Solutions, Inc./CN=GTE CyberTrust Global Root

“GTE Cyber​​Trust Global Root” 是 1024 位证书。(由于 1024 位证书已弃用,因此这可能会带来问题)

在我的浏览器中,如果我查看 WEBSITE.com 的证书层次结构,它会显示“Baltimore Cyber​​Trust Root”是根证书。(它是 2048 位的,很好!)

有趣的是,如果我在浏览器中查看“Baltimore Cyber​​Trust Root”的“发行者”,则该发行者就是它自己。另一方面,OpenSSL 表明它是由“GTE Cyber​​Trust Global Root”发行的。

为什么浏览器告诉我“Baltimore Cyber​​Trust Root”是根证书,而 openssl 告诉我“GTE Cyber​​Trust Global Root”是根证书?是什么导致了这种差异?

答案1

交叉认证解释了其中的差异。

请记住,证书只是主体名称和公钥的唯一组合。

在您的浏览器的信任锚列表中,主题名称为“Baltimore Cyber​​Trust Root”且公钥为 A 的证书已由其自身签名,因此是自签名根证书。

在您的 OpenSSL 信任锚列表中,主题名称为“Baltimore Cyber​​Trust Root”且公钥为 A 的证书已由“GTE Cyber​​Trust Global Root”签名。从逻辑上讲,这与浏览器使用的证书相同,尽管它不是自签名的,而是由上级根(在层级意义上是上级,而不是密钥长度)签名的。

SSL 库开发人员(微软Mozilla、OpenSSL 等)管理自己的信任锚列表;这就是为什么您会看到从最终实体证书到信任锚的不同路径。

因此,历史就是它们不同之处。Mozilla已删除Firefox 36 发布时,NSS 中的“GTE Cyber​​Trust Global Root”。微软可能也在同一时间将其删除。您的 OpenSSL 版本仍保留它。大约在同一时间,Mozilla 和微软可能会添加来自“Baltimore Cyber​​Trust Root”的自签名根 CA 证书,以便证书链构建仍然有效。

由于您没有提到您使用哪种浏览器,也没有提到 OpenSSL 的版本和平台,因此很难给出更精确的答案。

相关内容