用于https(SSL)的Curl命令

我想运行下面的CURL命令,但我得到一个SSL证书错误:

curl https://example.com:8443/cli/agentCLI -u username:password 

错误:

curl:(60)SSL证书问题,请validationCA证书是否正确。 详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书validation失败更多详细信息,请访问: http ://curl.haxx.se/docs/sslcerts.html

curl默认使用证书颁发机构(CA)公钥(CA证书)的“包”来执行SSL证书validation。 默认包名为curl-ca-bundle.crt; 您可以使用–cacert选项指定备用文件。 如果此HTTPS服务器使用包中表示的由CA签名的证书,则证书validation可能由于证书问题(可能已过期,或名称可能与URL中的域名不匹配)而失败。 如果您想closures卷发的证书validation,请使用-k(或–insecure)选项。

我将如何解决这个问题,以允许SSL URL?

Solutions Collecting From Web of "用于https(SSL)的Curl命令"

如果您在服务器上使用自签名证书,则可以使用:

 curl -k https://example.com:8443/cli/agentCLI -u username:password 

但是请注意,这样做并不比使用非SSL连接服务器更好,因为您的通信将不再安全,使各种各样的人在中间的攻击。

虽然我的建议是从服务器下载.pem

  • 这通常在/etc/ssl/找到, 如果您有权访问服务器 ,
  • 或者你可以下载,

使用:

 echo "HEAD / HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem 

到您的计算机上,只保留BEGIN CERTIFICATEEND CERTIFICATE之间的部分(包括BEGIN / END行),并将其作为参数给--cacert选项,您也可以下载它。 然后,每次连接时都会验证您的服务器!

 curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password 

测试我自己的自签名服务器,它工作正常:

 % openssl s_client -showcerts -connect example.com:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem % curl --cacert cert.pem https://example.com 

例如,应该工作:

 % openssl s_client -showcerts -connect git.cryptolib.org:443 </dev/null 2>/dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' | grep -m1 -B-1 -- '-----END CERTIFICATE-----' > cert.pem % curl --cacert cert.pem https://git.cryptolib.org curl: (51) SSL: certificate verification failed (result: 5) 

但可悲的是,事实并非如此。

我也试过这样做,如下所示:

 % openssl x509 -inform PEM -in cert.pem -text -out certdata.pem % curl --cacert certdata.pem https://git.cryptolib.org 

哪个不工作,因为我用于测试的站点(git.cryptolib.org)不是自签名的,而是来自CACert链,可以通过使用CACert根证书来解决这个问题 。


挖掘一些资源:

但到目前为止还没有明确的答案:-s