libcurl SSL连接错误

时间:2017-10-08 12:06:22

标签: macos curl libcurl

我有一个奇怪的情况,使用 libcurl GET 请求在Windows上运行,但在 OSX 上出现证书错误(" SSL对等握手失败,服务器很可能需要客户端证书才能连接")

奇怪的是,如果我使用curl在终端上尝试相同的请求(仍然在OSX上),它可以正常工作。

我使用的唯一SSL相关选项是

curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYPEER, 0);
curl_easy_setopt(curlHandle, CURLOPT_SSL_VERIFYHOST, 0);

如何解决这个问题?

Win7 curl version: 7.46
OSX Sierra curl version: 7:54

1 个答案:

答案 0 :(得分:1)

尝试使用详细输出curl)从OS X bash中使用-v。它应该为您提供有关CA cURL正在使用的信息,正如文档在verbose section中所说:

  

如果我们使用HTTPS:// URL而不是HTTP URL,那么还会有一大堆行解释curl如何使用CA证书来验证服务器的证书以及服务器证书等的一些细节。包括哪些选择了密码和更多TLS详细信息。

编辑: here是对我的评论的解释,在“限制”下:

  

DarwinSSL:如果验证值为0,则SNI也被禁用。 SNI是一个TLS扩展,它将主机名发送到服务器。服务器可以使用该信息来执行诸如发回主机名的特定证书或将请求转发到特定源服务器之类的事情。如果没有发送SNI,某些主机名可能无法访问。

这里的问题是cURL使用DarwinSSL用于OS X,当CURLOPT_SSL_VERIFYHOST设置为0时,它对某些主机名有限制。尝试发送请求而不禁用这两个选项。