我最近更新了我的网站上的SSL证书,虽然最初似乎authentication已经正确安装,但是几个小时以前,我惊讶地发现HTTPS连接不再能够在某些浏览器和版本中正确validation。
它目前使用以下浏览器进行身份validation:
但它不能正确authentication:
证书具有GeoTrust Global CA > RapidSSL CA > secure.mydomain.com的证书path。
什么可能解释这个问题? 这是一个安装问题? 浏览器问题? 证书问题?
我如何解决这个问题?
我有同样的问题 – 购买了一个基本的SSL证书(从networking解决scheme),安装在Nginx下,它在Opera和IE浏览器都能正常工作 – 但不是Firefox 3.6.12。 这就是我解决问题的方法。 请注意,我具有对我的VPS的root / shell访问权限,我不知道您是否这样做(至less这可能会将您的提供者指向正确的方向)。
find解决scheme的第一步是使用Qualys (根据这个其他答案 )。 它告诉我, 链条不完整 。
其次,我使用OpenSSL进行testing/debugging。 假设你有shell的访问权限,你可以执行命令( q或者CTRL-C断开连接):
openssl s_client -connect mysite.com:443
您可能会看到错误“无法获取本地发行者证书”。 这也是一种在shell中运行的时候testing它,而不用运行Firefox的方法。
某些浏览器可能会抱怨由知名证书颁发机构签名的证书,而其他浏览器可能会接受证书而不会造成任何问题。 发生这种情况的原因是,颁发机构已使用中间证书对服务器证书进行签名,该中间证书不在与特定浏览器一起分发的已知可信证书颁发机构的证书库中。 在这种情况下,权威机构提供一系列链接的证书 ,这些证书应连接到签名的服务器证书。 服务器证书必须出现在组合文件中的链接证书之前
在我的情况下,我从networking解决scheme获取了三个文件 – mysite.com.crt , AddTrustExternalCARoot.crt和NetworkSolutionsDVServerCA.crt 。 没有捆绑文件,但可以从其他证书创build一个文件。 经过一番反复试验,我发现我需要的是:
$ cat mysite.com.crt NetworkSolutionsDVServerCA.crt > mysite.com.chain.crt
最后一步是用新文件重新configuration我的nginx服务器:
server { listen 443; ssl on; ssl_certificate /etc/ssl/certs/mysite.com.chain.crt; ssl_certificate_key /etc/ssl/private/mysite.com.key; server_name mysite.com; # and so on }
在捆绑中获得正确的证书后,重新启动nginx, openssl报告没有错误,Firefox得到了没有问题的页面,Qualys报告链条是有效的。
由于您正在运行Apache,因此您(或您的提供者)需要使用正确的文件位置来configurationSSL ,其中之一是缺less的中间链文件:
<VirtualHost 192.168.0.1:443> DocumentRoot /var/www/html2 ServerName www.yourdomain.com SSLEngine on SSLCertificateFile /path/to/your_domain_name.crt SSLCertificateKeyFile /path/to/your_private.key SSLCertificateChainFile /path/to/DigiCertCA.crt </VirtualHost>
在您的域上尝试以下testing:
Qualys: https : //www.ssllabs.com/ssldb/index.html
DigiCert: http : //www.digicert.com/help/
我发现这两个非常方便固定随机SSL证书问题。
我使用这个Nginx和StartSSL,它也需要类CA:
cat ssl.pem ca.pem sub.class1.server.ca.pem> server.pem
要么
cat ssl.pem ca.pem sub.class2.server.ca.pem> server.pem
(根据你的class级)
证书可以包含一个特殊的机构信息访问扩展( RFC-3280 ),其中包含颁发者证书的URL。 大多数浏览器都可以使用AIA扩展下载缺less的中间证书来完成证书链。 但是一些客户端(旧的和移动浏览器,OpenSSL)不支持这个扩展,所以他们报告这样的证书不可信。
您可以手动解决不完整的证书链问题,方法是将证书中的所有证书连接到受信任的根证书(独占,按此顺序),以防止出现此类问题。 请注意,受信任的根证书不应该存在,因为它已包含在系统的根证书存储区中。
你应该能够从发行者那里获取中间证书,并且自己将它们连接在一起。 我已经写了一个脚本来自动执行这个过程,它在AIA扩展上循环以产生正确链接的证书的输出。 https://github.com/zakjan/cert-chain-resolver