[英]Adding self-signed SSL certificate for libcurl
我在我的C应用程序中使用libcurl与我设置的HTTPS服务器进行通信。 我在该服务器上生成了一个我希望与curl一起使用的自签名证书。
我知道将CURLOPT_SSL_VERIFYPEER设置为0以绕过SSL验证,但我希望将生成的证书添加到curl的“有效”CA证书中。
我已尝试将CURLOPT_CAPATH和CURLOPT_SSLCERT设置为服务器SSL公钥的位置,但无法通过验证。
如何添加自己的CA /自签名证书,以便libcurl成功验证它?
要添加自签名证书,请使用CURLOPT_CAINFO
要检索站点的SSL公共证书,请使用
openssl s_client -connect www.site.com:443 | tee logfile
证书是由----BEGIN CERTIFICATE----
和标记的部分
---END CERTIFICATE----
。
将该证书保存到文件中,并以这样的方式使用curl:
CURL* c = curl_easy_init();
curl_easy_setopt(c, CURLOPT_URL, "https://www.site.com");
curl_easy_setopt(c, CURLOPT_CAINFO, "/path/to/the/certificate.crt");
curl_easy_setopt(c, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_perform(c);
curl_easy_cleanup(c);
首先,你混淆了“证书颁发机构”文件和“证书”文件,这让我感到困惑。
如何添加自己的CA /自签名证书,以便libcurl成功验证它?
这可能被视为上述问题的补充答案。 如果您要添加自签名CA(每个root-CA都是自签名的),以便libcurl将成功验证由CA生成的网站证书,然后继续阅读。
使用CURLOPT_CAINFO,您需要传递在生成要验证的站点的(非CA)证书时使用的“证书颁发机构”文件(CA)。
(我不知道这个选项是否可以通过传递非CA证书,文档在这方面并不是很清楚,并且之前的答案有2个上选票,所以如果有人测试过它请评论)
您还可以传递包含所使用的CA的证书颁发机构链文件,以防它不是根CA.
这是我发现的一个小教程可以帮助您测试您的解决方案:
创建私有根CA: http : //www.flatmtn.com/article/setting-openssl-create-certificates
创建站点证书: http : //www.flatmtn.com/article/setting-ssl-certificates-apache
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.