c - 为 libcurl 添加自签名 SSL 证书

标签 c ssl libcurl self-signed

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

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

我试过将CURLOPT_CAPATH和CURLOPT_SSLCERT设置为服务器SSL公钥所在位置,但验证失败。

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

最佳答案

要添加自签名证书,请使用 CURLOPT_CAINFO

要检索站点的 SSL 公共(public)证书,请使用

openssl s_client -connect www.site.com:443 | tee logfile

证书就是----BEGIN 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);

关于c - 为 libcurl 添加自签名 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8876944/

相关文章:

c - 我很难让一个结构使用多个文件。请帮忙?

C: 当我将值放在括号中时,打印 %c 不起作用

python - 如何在 SSL 下制作网站的一部分而其余部分不?

c - curl_multi_fdset() 中的 exc_fd_set 是什么?

python - numpy.float128 的内部精度是多少?

c - 使用 ld 链接已编译的程序集和 C 文件

c++ - 编译错误 'set_ssl_context_callback' : on Windows

iOS 和 Erlang - 使用自签名证书的 SSL 握手失败

python - pycurl 和很多回调函数

C++ CURL 无法正确检索网页