在libcurl SSL请求中发送客户端证书时遇到问题,我遗漏了什么?

2022-05-17 00:00:00 ssl libcurl c++

我正在尝试将客户端证书发送到需要该证书的Web服务器。

如果我从命令行cURL命令发出请求,它就会工作。 我传递了--key文件名和--cert文件名,一切正常。

当我在libcurl库中执行此操作时,我执行以下操作:

    curl_easy_setopt(curl, CURLOPT_SSLCERT, client_cert_file.c_str());
    curl_easy_setopt(curl, CURLOPT_SSLKEY, client_key_file.c_str());

相同的是,服务器说缺少客户端证书。

我尝试过这样做,比如给它一个不存在的文件名,希望引起其他一些错误消息,这些消息可能会让我知道出了什么问题,但是当出现错误时,启用Verbose的libcurl(以及命令行cURL)不会产生任何错误消息。当然有失败的案例,但没有任何东西会让我犯任何可以跟进的错误。

有没有办法从libcurl中获取更多诊断信息?

把我头发上剩下的东西拉出来。

这是在Windows10上,顺便说一句,我们自己构建了libcurl。SSL是内置的,HTTPS连接可以工作,我就是无法让它发送客户端证书,也没有任何迹象表明出了什么问题。

更新:

我想我找到了我的问题...

https://curl.haxx.se/docs/todo.html#Add_support_for_client_certifica

有人知道如何使用它吗?


解决方案

好的,我想出了一些办法。

事实证明,您可以使用openssh或sChannel在Windows上构建libcurl。 如果使用SCANNEL,则CURLOPT_SSLCERT和CURLOPT_SSLKEY不执行任何操作。(请注意,没有警告或错误。) 也许他们确实做了一些与SChannel有关的事情,但我找不到任何关于这方面的文档。

简而言之,如果您使用OpenSSL构建libcurl,您可以提供一个客户端证书来发送TLS握手。

小费在这里:

https://curl.haxx.se/docs/todo.html#Add_support_for_client_certifica

相关文章