这实际上适用于我们使用同一证书的许多其他服务,但当您比较测试结果时,Apache 执行此操作的方式是最明显和最矛盾的。
我们的网站上有通配符证书https://webmail.lightspeed.ca。网络浏览器为我们的客户提供绿色锁,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 服务器时,这会带来问题,因为有些客户端(如 Android 版 Outlook)对这些东西非常挑剔。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,用于我们特定类型的通配符证书。
这对我来说只是一种烦恼。非常感谢您的帮助。
答案1
当你使用浏览器或使用各种在线工具进行测试时,你会使用预配置的信任锚(根 CA 证书)而openssl
使用不同的一组信任锚,通常由您的发行版定义和分发。
你需要告诉openssl
你的信任锚使用该-CAfile <filename>
选项可以定位。
如果openssl
不信任你的网站信任锚然后您需要从 CA 下载它,然后将其传递给openssl
选项-CAfile
。完成此操作后,openssl
将信任整个链,并且不会再向您显示该错误消息。