Curl Heroku SSL问题其给我验证失败

Curl Heroku SSL问题其给我验证失败,curl,ssl,heroku,openssl,ssl-certificate,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

我用这个命令更新了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" 
试试导游

还有美国

接下来,使用certs:add命令将您的证书、任何中间证书和私钥添加到端点

这与上面的指南有些矛盾,因为它没有提到任何关于根CA证书的内容。但我肯定会尝试一下指南,如果它不起作用,我会从heroku.pem中删除根证书

请帮我解决这个问题

Curl不应该声明错误19。错误19是OpenSSL的
X509\u V\u ERR\u SELF\u SIGNED\u CERT\u IN\u CHAIN
。你至少有两个问题


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

如果我读对了你的帖子,那意味着:

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

第二,你需要信任你的根。我并没有真正使用Curl,所以我不知道如何将一个根传递给信任。通过查看,Curl似乎不允许您指定信任点。因此,curl可能是这项工作的错误工具

以下是如何使用OpenSSL的
s_客户端
CAfile
选项)完成此操作:

printf“GET/HTTP/1.0\r\n”| openssl s_客户端\
-connectexample.com:443\
-卡菲尔
-CAfile
将使用位于的一个委托根目录。但我不知道是哪一个,因为您没有共享URL或域

如果需要,您可以删除
printf
,只需使用
openssl s_客户端
。但是,
s_client
在关闭套接字(或按下CTRL C)之前不会完成

使用OpenSSL
s_客户端
跟踪,您也将能够确定构建链所需的中间产品。有关解释
s_客户端
结果的示例,请参阅和


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


我有SSL证书

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

虽然Startcom免费颁发证书,但吊销证书要收费,因为这需要花钱。其他人则提前收取撤销费用,如果不需要,则将其收入囊中

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