我的应用使用SSL与服务器进行安全通信,并且无法验证证书链。链是这样的:理解SSL证书链验证的问题
Entrust.net安全服务器证书颁发机构 - > DigiCert全球CA - > * .ourdomain.com
我们使用的是证书存储来自Mozilla的拉动。它包含Entrust.net证书,但不包含DigiCert全球CA证书。
我的理解是,中间的权威没有,只要root权限被信任,但验证失败:
% openssl verify -CAfile mozilla-root-certs.crt ourdomain.com.crt
error 20 at 0 depth lookup:unable to get local issuer certificate
所以我需要明确地信任DigiCert全球CA在为了验证通过?这似乎是错误的。但你告诉我!
编辑:我现在明白,证书文件需要预先提供给OpenSSL。像这样的工作:
% openssl verify -CAfile mozilla-root-certs.crt -untrusted digicert.crt ourdomain.com.crt
ourdomain.com.crt: OK
这让我提供DigiCert CA的副本,而不明确地说:“我相信它”,整个产业链仍有待验证。
但是像Firefox这样的浏览器肯定不会总是附带它需要的每一个证书的副本。总会有新的CA,关键是要使用根证书的安全性来确保所有中间CA都是有效的。对?那么如何这项工作?它看起来真的很傻吗?
在OpenBSD上,'-CAfile'可以设置为'/ etc/ssl/cert.pem'。 – 2015-07-24 12:30:41