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

Custom SSL certificate validation with 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*。使用此指针更改默认的 'verify' 函数并将其指向您自己的 'verify' 方法。您需要使用 SSL_CTX_set_verify。 ['https://www.openssl.org/docs/man1.0.2/man3/SSL_CTX_set_verify.html']