https(SSL)的卷曲命令

Kal*_*san 9 linux shell ssl https curl

我试图运行以下CURL命令,但我收到SSL证书错误:

curl https://example.com:8443/cli/agentCLI -u username:password
Run Code Online (Sandbox Code Playgroud)

错误:

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

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

如何修复此问题以允许SSL URL?

zmo*_*zmo 16

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

curl -k https://example.com:8443/cli/agentCLI -u username:password
Run Code Online (Sandbox Code Playgroud)

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

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

使用:

echo "HEAD / HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem
Run Code Online (Sandbox Code Playgroud)

在您的计算机上,只保留文件之间BEGIN CERTIFICATEEND CERTIFICATE文件内的部分(包括BEGIN/END行)并将其作为参数提供给该--cacert选项,您也可以下载它.然后,每次连接时,您都可以对服务器进行身份验证!

curl --cacert cert.pem https://example.com:8443/cli/agentCLI -u username:password
Run Code Online (Sandbox Code Playgroud)

在我自己的自签名服务器上进行测试,它运行正常:

% 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
Run Code Online (Sandbox Code Playgroud)

一个应该工作的例子:

% 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)
Run Code Online (Sandbox Code Playgroud)

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

我也试着做,作为建议在这里:

% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https://git.cryptolib.org
Run Code Online (Sandbox Code Playgroud)

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


一些挖掘资源:

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