从命令行使用CURL进行https连接
我是Curl和Cacerts世界的新手,在连接服务器时遇到问题。 基本上,我需要通过httpstesting连接从一台机器到另一台机器。 我有一个URL,我需要从机器A(一台Linux机器)连接我试图在命令提示符下
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
的文本并将其保存在一个文件中。 但是,应该是什么types的文件? .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]
但是得到了同样的错误。
我有同样的问题 – 我从我自己的网站,通过HTTPS提供一个页面,但curl是给出了相同的“SSL证书问题”消息。 我通过添加一个-k
标志来解决这个问题,以允许不安全的连接。
curl -k https://whatever.com/script.php
编辑:我发现了问题的根源。 我正在使用SSL证书(来自StartSSL,但我不认为这很重要),并没有正确设置中间证书。 如果您遇到与上面的user1270392相同的问题,那么在使用curl -k
修复程序之前, testing您的SSL证书并解决其中的任何问题可能是个好主意。
您需要提供整个证书链来curl,因为curl不再附带任何CA证书。 由于cacert选项只能使用一个文件,因此需要将完整的链接信息连接成1个文件
将证书链(例如从您的浏览器)复制到DER编码的二进制文件x.509(.cer)中。 为每个证书做这个。
将证书转换成PEM,并将它们连接成1个文件。
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/10using-curl-with-ssl-cert-chain.html
这是我的日常脚本:
curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'
输出继电器:
* Server certificate: * subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com * start date: 2016-01-07 11:34:33 GMT * expire date: 2016-04-06 00:00:00 GMT * issuer: C=US; O=Google Inc; CN=Google Internet Authority G2 * SSL certificate verify ok. * Server GFE/2.0 is not blacklisted * Connection #0 to host www.google.com left intact
不知道你build议的解决scheme,但我只是在寻找类似的信息,我发现这个有用的网站使用curl与PHP
http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
使用--cacert
指定一个.crt
文件。 例如ca-root-nss.crt
。
我实际上有这样的问题,我通过这些步骤解决它:
-
从这里获取根CA证书包: https : //curl.haxx.se/ca/cacert.pem并保存在本地
-
find
php.ini
文件 -
将
curl.cainfo
设置为证书的path。 所以它会像这样:
curl.cainfo = /path/of/the/keys/cacert.pem
有了重大的问题,我可以使用现有的系统默认CA文件,在debian6这是:
/etc/ssl/certs/ca-certificates.crt
作为根可以这样做:
echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini
然后重新启动networking服务器。
在这里你可以findCA证书,下载和转换Mozilla CA证书 。 一旦你得到ca-bundle.crt
或者cacert.pem
你就可以使用:
curl.exe --cacert cacert.pem https://www.google.com
要么
curl.exe --cacert ca-bundle.crt https://www.google.com