如果你正在服务器上使用自签名证书,可以使用:
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 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)
但可悲的是,它不起作用。
我也尝试按照这里的建议进行操作:
% 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