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的证书层次结构,它说“巴尔的摩Cyber​​Trust Root”是根证书。 (这是2048位,这是好的!)

有趣的是,如果我在浏览器中查看“巴尔的摩Cyber​​Trust Root”的“发行人”,发行人本身就是这样。 另一方面,OpenSSL表示它是由“GTE Cyber​​Trust Global Root”发布的。

为什么浏览器告诉我“巴尔的摩Cyber​​Trust Root”是根证书,openssl告诉我“GTE Cyber​​Trust Global Root”是根? 什么说明了这个区别?

Crossauthentication考虑了差异。

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

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

在您的OpenSSL信任锚列表中,“GTE Cyber​​Trust Global Root”已经签署了使用者名称为“Baltimore Cyber​​Trust Root”和公钥A的证书。 这与您的浏览器所使用的证书逻辑上是相同的,尽pipe它不是自签名的,而是由上级根(在分级意义上而不是密钥长度上)签名的。

SSL库( Microsoft , Mozilla ,OpenSSL等)的开发人员pipe理自己的信任锚点列表; 这就是为什么你会看到从最终实体证书到信任锚的不同path。

所以,历史就是为什么不同。 Mozilla在Firefox 36发布时删除了NSS的“GTE Cyber​​Trust Global Root”。 微软也可能在同一时间删除它。 你的OpenSSL版本仍然有它。 大约在同一时间,Mozilla和微软可能会在“巴尔的摩Cyber​​Trust Root”中添加一个自签名根CA证书,以便证书链build设仍然有效。

由于您没有提及您使用的浏览器以及OpenSSL的版本和平台,因此很难提供更准确的答案。