我导出了 google.com 提供的证书,其链接为“GTS Root R1”->“GTS CA 1C3”->“*.google.com”。我将“GTS CA 1C3 + *.google.com”放入 inter.cer 文件中。然后从 chrome 管理证书中我找到“GTS Root R1”并将其导出到 root_ca.cer。用 root_ca.cer 验证了 inter.cer,没问题:-
% openssl verify -CAfile root_ca.cer inter.cer
inter.cer: OK
此外,我还有另一个来自 QuoVadis 的 root ca,名为 quovadis.cer (发行者:C=BM、O=QuoVadis Limited、CN=QuoVadis Root CA 2),当我验证 inter.crt 时,它也成功了:-
% openssl verify -CAfile quovadis.cer inter.cer
inter.cer: OK
现在我的问题是,证书链(这里是 inter.cer )如何能够由两个不同的根 CA 进行验证。针对“GTS Root R1”( root_ca.cer )的验证我可以理解,但是 quovadis.cer 也可以验证 inter.cer。两个根 CA 都有不同的公钥、密钥标识符等。
我浏览了不同的文章,但没有得到任何满意的答案。
虽然
-CAfile
adds 根 CA 进行验证,但它不会删除现有受信任 CA 的使用。这意味着如果相关 CA 位于默认 CA 存储中,则您在 -CAfile
中给出的内容并不重要,即,它与您省略此选项的效果相同。
要从验证过程中删除默认 CA,您还需要添加
-no-CAfile
、-no-CApath
和 -no-CAstore
。请参阅 openssl-verification-options。