首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >https ( SSL )的Curl命令

https ( SSL )的Curl命令
EN

Stack Overflow用户
提问于 2015-03-08 13:36:59
回答 1查看 98.1K关注 0票数 15

我试图运行以下CURL命令,但是我得到了一个SSL证书错误:

代码语言:javascript
运行
复制
curl https://example.com:8443/cli/agentCLI -u username:password

错误:

curl:(60) SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate验证失败详细信息在这里:http://curl.haxx.se/docs/sslcerts.html curl默认使用证书颁发机构(CA)公钥(CA certs)的“包”来执行SSL证书验证。默认的包名为curl bundle.crt;您可以使用--cacert选项指定一个备用文件。如果此HTTPS服务器使用由包中表示的CA签名的证书,证书验证可能由于证书问题而失败(该证书可能过期,或者该名称可能与URL中的域名不匹配)。如果要关闭curl对证书的验证,请使用-k (或-不安全)选项。

如何解决此问题以允许使用SSL URL?

EN

回答 1

Stack Overflow用户

发布于 2015-03-08 13:59:49

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

代码语言:javascript
运行
复制
curl -k https://example.com:8443/cli/agentCLI -u username:password

但是请注意,这样做不会比使用到服务器的非SSL连接更好,因为您的通信将不再是安全的,从而使所有类型的人都能在中间攻击。

尽管我给您的建议是从服务器下载.pem

使用:

代码语言:javascript
运行
复制
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之间的部分保存在文件中(包括开始行/结束行),并将其作为参数提供给--cacert选项,您也可以下载它。然后,每次连接时,您都可以验证您的服务器!

代码语言:javascript
运行
复制
curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password

在我自己的自签名服务器上测试,它运行得很好:

代码语言:javascript
运行
复制
% 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

举个应该起作用的例子:

代码语言:javascript
运行
复制
% 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)

但遗憾的是,事实并非如此。

我也试着去做,就像这里建议的那样

代码语言:javascript
运行
复制
% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https://git.cryptolib.org

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

一些资源可供挖掘:

但到目前为止还没有确定的答案

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28927051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档