我的应用程序使用 SSL 与服务器进行安全通信,但无法验证证书链。链条看起来像这样:
Entrust.net 安全服务器证书颁发机构 -> DigiCert 全球 CA -> *.ourdomain.com
我们正在使用从 Mozilla 提取的证书存储。它包含 Entrust.net 证书,但不包含 DigiCert Global CA 证书。
我的理解是,只要是根权限,就不必信任中间权限,但是验证失败:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
那么我是否需要明确信任 DigiCert Global CA 才能通过验证?这似乎是错误的。但是你告诉我!
编辑:我现在明白证书文件需要预先可供 OpenSSL 使用。像这样的工作:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
这允许我提供一份 DigiCert CA 的副本,而无需明确表示“我信任它”,整个链仍然需要验证。
但可以肯定的是,像 Firefox 这样的浏览器不会总是附带一份它所需要的每一个证书的副本。总会有新的 CA,关键是使用根证书的安全性来确保所有中间 CA 都是有效的。对?那么这是如何工作的呢?真的像看起来那么傻吗?