我使用此命令更新了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"
答案 0 :(得分:0)
试试this指南。
接下来,使用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_client
(CAfile
选项)执行此操作的方法:
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 accept和Can't verify CA certificate unless CApath or CAfile used。
第三,-k
选项是客户端密钥选项。因为您没有发送客户证书,所以我不相信您需要它。但我也不相信这也是你问题的一部分。
我已委托SSL证书。
最后,您可以从Startcom获得免费的1级证书。默认情况下,它们在大多数桌面和移动浏览器中都是受信任的。
虽然Startcom免费发放证书,但他们会收取撤销费用,因为这需要花钱。其他人则预先收取撤销费用,如果不需要则将钱存入口袋。