我是Curl和Cacerts的新手,在连接到服务器时遇到了一个问题。基本上,我需要测试通过https从一台机器到另一台机器的连通性。我有一个URL,我需要从计算机A(一台linux计算机)连接到该URL,我在命令提示符上尝试了一下
cmd> curl https://[my domain or IP address]
并得到了以下结果:
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
在浏览互联网上的一些文章时,我这样做了:
openssl s_client -connect <domain name or Ip address>:443
并得到了一些响应,包括服务器证书(在-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
内部)。
接下来我该怎么做呢?我想,我只需要将文本复制粘贴到BEGIN CERTIFICATE & END CERTIFICATE
中并保存到一个文件中即可。但是,它应该是什么类型的文件?.pem
,.crt
?.在那之后我应该做什么?
我尝试了一下--复制BEGIN CERTIFICATE & END CERTIFICATE
中的文本并将其保存到一个.crt
文件中--命名为my-ca.crt
(也尝试了同样的操作,将其命名为my-ca.pem
文件),然后这样做:
cmd>curl --cacert my-ca.crt https://[my domain or IP address]
但得到了相同的错误。
发布于 2014-02-11 01:57:43
我也遇到了同样的问题--我从我自己的网站上获取了一个页面,这个页面是通过HTTPS提供的,但是curl给出了同样的"SSL证书问题“消息。我通过向调用添加一个-k
标志来允许不安全的连接,从而解决了这个问题。
curl -k https://whatever.com/script.php
编辑:我发现了问题的根源。我使用的是SSL证书(来自StartSSL,但我认为这并不重要),并且没有正确设置中间证书。如果您遇到了与上面的user1270392相同的问题,那么在求助于curl -k
修复之前,使用test your SSL cert并修复任何问题可能是一个好主意。
发布于 2015-10-21 17:09:29
您需要为curl提供整个证书链,因为curl不再附带任何CA证书。由于cacert选项只能使用一个文件,因此您需要将完整的链信息连接到一个文件中
将证书链(例如,从浏览器)复制到DER编码的二进制x.509(.cer)中。对每个证书执行此操作。
将证书转换为PEM,并将它们合并为一个文件。
openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text
cat *.pem > certRepo
curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"
我在这里写了一个关于如何做到这一点的博客:http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html
发布于 2013-04-30 18:03:47
使用--cacert
指定.crt
文件。例如,ca-root-nss.crt
。
https://stackoverflow.com/questions/10079707
复制相似问题