Heroku SSL问题它给我验证失败

时间:2014-03-14 09:04:27

标签: curl ssl heroku openssl ssl-certificate

我使用此命令更新了heroku上的所有证书

heroku certs:add heroku.pem server.key -a myapp --bypass

heroku.pem有以下细节

-----BEGIN CERTIFICATE----- 
entrustcert.crt
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
L1Cchain.txt
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
L1Croot.txt
-----END CERTIFICATE-----

当我在服务器上运行测试时,它给我这个结果

SSL certificate verify result: self signed certificate in certificate chain (19), continuing anyway.

我已委托SSL证书。

请帮我解决这个问题

我用于测试的

命令:

curl -kvI "my HTTPS domain name" 

2 个答案:

答案 0 :(得分:0)

试试this指南。

official documentation

  

接下来,使用certs:add命令

将证书,任何中间证书和私钥添加到端点

它与上面的指南有些矛盾,因为它没有说明根CA证书。但我肯定会尝试使用该指南,如果它不起作用,我会从heroku.pem中删除根证书。

答案 1 :(得分:0)

  

请帮我解决这个问题

卷曲不应该声称错误19.错误19是OpenSSL的X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN。你至少有两个问题。


首先,您要发送包含您的root的证书链。不要在证书链中发送根。仅将最终实体(服务器)证书和构建链所需的任何中间体发送到受信任的根。如果没有中间体,则只发送最终实体(服务器)证书。

如果我正确阅读你的帖子,那意味着:

-----BEGIN CERTIFICATE----- 
server cert (entrustcert.crt)
-----END CERTIFICATE----- 
-----BEGIN CERTIFICATE----- 
intermediate cert (L1Cchain.txt)
-----END CERTIFICATE----- 

其次,你需要Curl来信任你的root。我不是真的使用Curl,所以我不知道如何传递一个根来信任。通过curl(1) man pages查看,Curl不允许您指定信任点。所以卷曲可能是这项工作的错误工具。

以下是使用OpenSSL s_clientCAfile选项)执行此操作的方法:

printf "GET / HTTP/1.0\r\n" | openssl s_client \
    -connect example.com:443 \
    -CAfile <root to trust>

-CAfile将在Entrust Root Certificates - SSL使用其中一个Entrust根。但我不知道哪一个,因为您没有共享网址或域名。

如果需要,您可以删除printf,然后使用openssl s_client。但s_client在套接字关闭(或按下 CTRL C )之前不会结束。

使用OpenSSL s_client跟踪,您也可以确定构建链所需的中间体。有关解释s_client结果的示例,请参阅s_client verify certificate failed, but browser acceptCan't verify CA certificate unless CApath or CAfile used


第三,-k选项是客户端密钥选项。因为您没有发送客户证书,所以我不相信您需要它。但我也不相信这也是你问题的一部分。


  

我已委托SSL证书。

最后,您可以从Startcom获得免费的1级证书。默认情况下,它们在大多数桌面和移动浏览器中都是受信任的。

虽然Startcom免费发放证书,但他们会收取撤销费用,因为这需要花钱。其他人则预先收取撤销费用,如果不需要则将钱存入口袋。