我正在尝试运行以下CURL命令但是我收到了SSL证书错误:
curl https://example.com:8443/cli/agentCLI -u username:password
错误:
卷曲:(60)SSL证书问题,验证CA证书是否正常。细节: 错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败 更多详情:http://curl.haxx.se/docs/sslcerts.html
curl默认使用"捆绑"执行SSL证书验证。 证书颁发机构(CA)公钥(CA证书)。默认 bundle名为curl-ca-bundle.crt;您可以指定备用文件 使用--cacert选项。 如果此HTTPS服务器使用由CA表示的CA签名的证书 捆绑,证书验证可能由于a而失败 证书问题(可能已过期,或名称可能已过期) 与URL中的域名不匹配)。 如果您想关闭curl对证书的验证,请使用 -k(或--insecure)选项。
如何修复此问题以允许SSL网址?
答案 0 :(得分:14)
如果您在服务器上使用自签名证书,则可以使用:
curl -k https://example.com:8443/cli/agentCLI -u username:password
但请注意,然后它并不比使用非SSL连接到服务器更好,因为您的通信不再是安全的,可以使各种人在中间攻击。
虽然我的建议是从服务器下载.pem
:
/etc/ssl/
if you have access to the server,使用:
echo "HEAD / HTTP/1.0\n Host: example.com\n\n EOT\n" | openssl s_client -prexit -connect example.com:8443 > cert.pem
到您的计算机,只保留文件中BEGIN CERTIFICATE
和END 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)
但遗憾的是没有。
我还尝试按照建议here:
进行操作% openssl x509 -inform PEM -in cert.pem -text -out certdata.pem
% curl --cacert certdata.pem https://git.cryptolib.org
哪个不起作用,因为我用于测试的网站(git.cryptolib.org)不是自签名的,而是来自CACert链,可以通过使用CACert根证书,遵循此FAQ。
挖掘的一些资源:
但到目前为止还没有确定的答案:-s