为libcurl添加自签名SSL证书

时间:2012-01-16 07:38:20

标签: c ssl libcurl self-signed

我在我的C应用程序中使用libcurl与我设置的HTTPS服务器进行通信。我在该服务器上生成了一个我希望与curl一起使用的自签名证书。

我知道将CURLOPT_SSL_VERIFYPEER设置为0以绕过SSL验证,但我希望将生成的证书添加到curl的“有效”CA证书中。

我已尝试将CURLOPT_CAPATH和CURLOPT_SSLCERT设置为服务器SSL公钥的位置,但无法通过验证。

如何添加自己的CA /自签名证书,以便libcurl成功验证它?

2 个答案:

答案 0 :(得分:2)

要添加自签名证书,请使用 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);

答案 1 :(得分:0)

首先,您可以混合“证书颁发机构”文件和“证书”文件,这些文件让我感到困惑。

  

如何添加自己的CA /自签名证书,以便libcurl能够   成功验证了吗?

这可能被视为上述问题的补充答案。 如果您要添加自签名CA(每个root-CA都是自签名的),以便libcurl将成功验证由CA生成的网站证书,然后继续阅读。

使用CURLOPT_CAINFO,您需要传递生成您要验证的站点的(非CA)证书时使用的“证书颁发机构”文件(CA)。

(我不知道这个选项是否可以通过传递非CA证书,文档在这方面并不是很明确,而且之前的答案有2个投票,所以如果有人测试过它请评论)< / p>

如果它不是root-CA,您还可以传递包含所用CA的证书颁发机构链文件。

这是我发现的一个小教程,可以帮助您测试解决方案:

创建私有根CA: http://www.flatmtn.com/article/setting-openssl-create-certificates

创建站点证书: http://www.flatmtn.com/article/setting-ssl-certificates-apache