SSL和Apache:GeoTrust CryptoReport说“OK”,但openssl说“无法获得本地颁发者证书”

这实际上适用于我们使用这个相同证书的其他一些服务,但是当你比较testing结果时,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)

这就是我们的Apacheconfiguration对于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 

虽然我知道连接正在encryption,但显然这个错误信息也意味着我没有被完全validation为我所说的我。 当我们应用这些相同的证书来说我们的SMTP或POP服务器时,这是有问题的,因为有些客户端(如Android的Outlook)真的是这样的肛门。 例如,在http://www.checktls.com/perl/TestReceiver.pl的testing不喜欢这个,我们得到了错误Cert NOT VALIDATED: unable to get local issuer certificate 。 我觉得这很奇怪,因为文件GeoTrust_DV_SSL_CA-G3.pem是我们的中级CA证书。 它是Geotrust的CA,用于我们特殊的通配证书。

这只不过是我的一个恶化来源。 你的帮助将不胜感激。

当您使用浏览器或使用各种在线工具进行testing时,您使用预先configuration的信任锚 (根CA证书),而openssl使用一组不同的信任锚 (通常由发行版定义和分发)。

您需要使用-CAfile <filename>选项告诉openssl您的信任锚位于-CAfile <filename>

如果openssl不信任你的网站的信任锚,那么你需要从你的CA下载,然后通过-CAfile选项传递给openssl 。 一旦你这样做了, openssl会相信整个链,并会停止给你这个错误信息。