这实际上适用于我们使用相同证书的许多其他服务,但是当您比较测试结果时,Apache 这样做的方式是最明显和矛盾的。
我们的网站https://webmail.lightspeed.ca上有一个通配符证书。Web 浏览器给我们的客户一个绿色锁,GeoTrust 的 CryptoReport 在https://cryptoreport.geotrust.com/checker/告诉我我们的证书安装正确。然而,当我尝试使用时openssl s_client -connect webmail.lightspeed.ca:443
,我得到了错误Verify return code: 20 (unable to get local issuer certificate)
这是我们的 Apache 配置对于 SSL 的样子:
SSLEngine on
SSLCertificateFile /mailhome/webmail.lightspeed.ca/ssl.cert
SSLCertificateKeyFile /mailhome/webmail.lightspeed.ca/ssl.key
SSLCACertificateFile /etc/ssl/certs/GeoTrust_DV_SSL_CA-G3.pem
虽然我知道连接正在被加密,但显然这个错误消息也意味着我没有被完全验证我所说的我是谁。当我们应用这些相同的证书来表示我们的 SMTP 或 POP 服务器时,这是有问题的,因为某些客户端(如 Outlook for Android)对这些东西非常敏感。例如, http://www.checktls.com/perl/TestReceiver.pl上的测试不喜欢这样,我们得到错误Cert NOT VALIDATED: unable to get local issuer certificate
。我觉得这很奇怪,因为文件 GeoTrust_DV_SSL_CA-G3.pem 是我们的中间 CA 证书。它是我们特定类型通配符证书的 Geotrust 的 CA。
这对我来说只不过是一个恶化的根源。您的帮助将不胜感激。
当您使用浏览器或使用各种在线工具进行测试时,您使用预配置的信任锚(根 CA 证书),而
openssl
使用一组不同的信任锚运行,通常由您的发行版定义和分发。您需要使用该选项告诉
openssl
您的信任锚位于何处。-CAfile <filename>
如果
openssl
不信任您网站的信任锚,那么您需要从您的 CA 下载它,然后将其传递给openssl
该-CAfile
选项。完成此操作后,openssl
将信任整个链并停止向您提供该错误消息。