【问题标题】:SSL Error: unable to get local issuer certificateSSL 错误:无法获取本地颁发者证书
【发布时间】:2014-08-13 21:46:52
【问题描述】:

我在 Debian 6.0 32 位服务器上配置 SSL 时遇到问题。我对 SSL 比较陌生,所以请多多包涵。我尽可能多地提供信息。
注意:真实域名已更改,以保护服务器的身份和完整性。

配置

服务器正在使用 nginx 运行。配置如下:

ssl_certificate           /usr/local/nginx/priv/mysite.ca.chained.crt;
ssl_certificate_key       /usr/local/nginx/priv/mysite.ca.key;
ssl_protocols             SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers               HIGH:!aNULL:!MD5;
ssl_verify_depth          2;

我使用here描述的方法链接了我的证书

cat mysite.ca.crt bundle.crt > mysite.ca.chained.crt

其中mysite.ca.crt 是签名机构给我的证书,bundle.crt 是我的签名机构也发给我的 CA 证书。问题是我没有直接从 GlobalSign 购买 SSL 证书,而是通过我的托管服务提供商 Singlehop。

测试

证书在 Safari 和 Chrome 上正确验证,但在 Firefox 上无效。初步搜索显示这可能是 CA 的问题。

我探索了similar question 的答案,但无法找到解决方案,因为我并不真正了解每个证书的用途。

我使用 openssl 的 s_client 测试连接,收到的输出似乎表明与 the similar question 相同的问题。错误如下:

depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /OU=Domain Control Validated/CN=*.mysite.ca
verify error:num=27:certificate not trusted
verify return:1

可以在here找到完整的openssl响应细节(证书和不必要的信息被截断)。

我也看到了警告:

No client certificate CA names sent

这可能是问题所在吗?如何确保 nginx 发送这些 CA 名称?

解决问题的尝试

我试图通过直接从 GlobalSign 下载根 CA 来解决问题,但收到了同样的错误。我使用update-ca-certificates 命令更新了我的Debian 服务器上的根CA,但没有任何改变。这可能是因为我的提供商发送的 CA 是正确的,因此导致证书被链接两次,这没有帮助。

0 s:/OU=Domain Control Validated/CN=*.mysite.ca
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

后续步骤

如果有什么我可以尝试的,或者我只是配置不正确,请告诉我。

【问题讨论】:

  • 您的域证书由颁发者AlphaSSL CA - SHA256 - G2 签名。但是,您的连锁店提供中间 AlphaSSL CA - G2。我相信您需要删除当前的中间证书(AlphaSSL CA - G2),并将其替换为带有指纹的证书ae:bf:32:c3:c8:32:c7:d7...AlphaSSL CA - SHA256 - G2)。此外,您不需要发送GlobalSign Root CA。客户端必须根其信任他们的(或在中间)。
  • 您将能够使用 OpenSSL 在本地进行测试。试试openssl s_client -connect <server>:<port> -CAfile <GlobalSign Root CA.pem>。该命令应以Verify OK (0) 或类似名称结尾。当您获得Verify OK (0) 时,服务器已正确配置(针对此问题)。
  • 当您下载新的中间体时,您需要使用openssl x509 -in gsalphasha2g2.crt -inform DER -out Alpha-SHA256-G2.pem -outform PEM 将其转换为 PEM。
  • 美丽。我相信它现在正在工作。出于某种原因,我以为我试图获得 SHA 256,但我一定没有正确转换它。谢谢你,真诚的。
  • 是的,要寻找的是主题-发行者对返回根目录或 CA。 OpenSSL 在s_client 下将它们显示为i:s:。获得所需的证书后,将它们全部连接 除了 根。因为它们是连接的,所以它们需要采用 PEM 格式。该网址很有帮助。试图帮助那些不提供信息的人已经过时了,所以我们可以用s_client在本地查看它。 (如果你没有提供 URL,我会投票关闭)。

标签: security ssl https openssl ssl-certificate


【解决方案1】:

jww 是对的——你引用了错误的中间证书。

由于您已获得 SHA256 证书,因此您将需要 SHA256 中间证书。你可以从这里获取它:http://secure2.alphassl.com/cacert/gsalphasha2g2r1.crt

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 2011-12-26
    • 2016-07-06
    • 2018-06-11
    • 2017-07-19
    相关资源
    最近更新 更多