今天,我注意到OpenSSL和浏览器(Firefox,Chrome)为我提供了不同的网站证书链。 OpenSSL显示来自“GTE CyberTrust Global Root”的根证书,Firefox和Chrome显示“Baltimore CyberTrust 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 CyberTrust Global Root”是一个1024位的证书。 (由于1024位证书已被弃用,这可能是一个问题)
在我的浏览器中,如果我查看WEBSITE.com的证书层次结构,它说“巴尔的摩CyberTrust Root”是根证书。 (这是2048位,这是好的!)
有趣的是,如果我在浏览器中查看“巴尔的摩CyberTrust Root”的“发行人”,发行人本身就是这样。 另一方面,OpenSSL表示它是由“GTE CyberTrust Global Root”发布的。
为什么浏览器告诉我“巴尔的摩CyberTrust Root”是根证书,openssl告诉我“GTE CyberTrust Global Root”是根? 什么说明了这个区别?
Crossauthentication考虑了差异。
请记住,证书只是主题名称和公钥的唯一组合。
在您的浏览器的信任锚列表中,主题名称为“Baltimore CyberTrust Root”和公钥A的证书已由自己签名,因此是自签名的根证书。
在您的OpenSSL信任锚列表中,“GTE CyberTrust Global Root”已经签署了使用者名称为“Baltimore CyberTrust Root”和公钥A的证书。 这与您的浏览器所使用的证书逻辑上是相同的,尽pipe它不是自签名的,而是由上级根(在分级意义上而不是密钥长度上)签名的。
SSL库( Microsoft , Mozilla ,OpenSSL等)的开发人员pipe理自己的信任锚点列表; 这就是为什么你会看到从最终实体证书到信任锚的不同path。
所以,历史就是为什么不同。 Mozilla在Firefox 36发布时删除了NSS的“GTE CyberTrust Global Root”。 微软也可能在同一时间删除它。 你的OpenSSL版本仍然有它。 大约在同一时间,Mozilla和微软可能会在“巴尔的摩CyberTrust Root”中添加一个自签名根CA证书,以便证书链build设仍然有效。
由于您没有提及您使用的浏览器以及OpenSSL的版本和平台,因此很难提供更准确的答案。