从命令行使用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

我实际上有这样的问题,我通过这些步骤解决它:

  1. 从这里获取根CA证书包: https : //curl.haxx.se/ca/cacert.pem并保存在本地

  2. findphp.ini文件

  3. 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