繁体   English   中英

为libcurl添加自签名SSL证书

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM