使用 libcurl 进行自定义 SSL 证书验证

标签 c ssl curl libcurl

我需要 libcurl 来接受自签名证书,但我不希望它们被盲目接受。在允许连接继续之前,我需要能够验证证书是预期的自签名证书。
在 .NET 中,这是通过使用 SslStream 或 HttpWebRequest 设置 RemoteCertificateValidationCallback 来完成的。回调提供证书,并且可以进行检查以验证预期的详细信息。如果您想知道,我有一种将证书详细信息分发给需要它们的代理的安全方法。
使用 libcurl,最接近 SSL 回调的是 CURLOPT_SSL_CTX_FUNCTION 但是文档状态:

This callback function gets called by libcurl just before the initialization of an SSL connection after having processed all other SSL related options to give a last chance to an application to modify the behavior of the SSL initialization.


这意味着在进行实际 SSL 连接之前调用回调,这意味着尚未收到证书以进行验证。除非我误解了我可以在那个回调中做什么,有没有办法用 libcurl 进行我自己的 SSL 验证?

最佳答案

@0xdeadbeef 您可以使用 SSL 回调。在那里,您将收到 SSL_CTX*。使用此指针更改默认的“验证”函数并将其指向您自己的“验证”方法。您需要使用 SSL_CTX_set_verify。 ['https://www.openssl.org/docs/man1.0.2/man3/SSL_CTX_set_verify.html']

关于使用 libcurl 进行自定义 SSL 证书验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838677/

相关文章:

curl - 如何使用带有 curl 的 GitHub API v3 创建和发布版本?

c - #error 将 -D_FILE_OFFSET_BITS-64 添加到您的编译标志中

c - 代码块中的 "No such file or directory"错误

wcf - 当 SSL 在 IIS 场 (WCF) 前面的代理上时如何使用 Forms Auth?

python - 如何使用本地服务器的 nginx 将 http 转换为 https(自签名证书)

html - Paypal 订阅设置

c++ - 编译具有相同 header 的 C 和 C++ 文件时 undefined reference

c - 如何使用 strcat() 函数?

java - Jetty WebsocketClient 不连接 Android 上的 SSL

ssl - Bad Request - Invalid Hostname HTTP 错误 400。请求主机名无效