libcurl gnutls_handshake()失败:收到了TLS警告警报

时间:2011-04-26 17:46:54

标签: c ssl libcurl

我基本上是在尝试执行以下操作:

http://curl.haxx.se/libcurl/c/https.html

我的apache服务器设置了mod_ssl和服务器证书。我添加了一行:

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

并尝试过:

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);

但我一直收到错误:gnutls_handshake()失败:收到了TLS警告提示。

有谁知道要解决这个问题或者解决这个问题?

3 个答案:

答案 0 :(得分:4)

意识到这个问题相当陈旧,已经接受了一个答案,这里有一个替代答案,对我来说非常有用,可能对来自搜索的人有用:

  • int替换为libcurl-gnutls替代。

我注意到证书错误只是使用libcurl而不是使用浏览器的程序生成的,因此我认为GNUTLS的某些内容是错误的而不是证书。

这对我有用(Ubuntu 12.04 LTS):

libcurl-openssl

所有依赖libcurl的程序在我更换库后立即开始正常工作(我还重新编译了程序以防万一)。

注意:此解决方案只会在您收到GNUTLS警告但不会使用浏览器时发出警告。也就是说,我假设证书链实际上已正确设置。

答案 1 :(得分:3)

我尝试了上述解决方案,但这对我不起作用。在python中,我尝试了以下选项,它有效地强制使用SSLv3并禁用TLS。

c.setopt(pycurl.SSLVERSION, pycurl.SSLVERSION_SSLv3)
在PHP中

应该可以通过将CURLOPT_SSLVERSION选项设置为3来完成。

答案 2 :(得分:2)

您获得的“通常”警告意味着没有任何知名组织(证书颁发机构)愿意保证其真实性。这就是“通常”警告意味着什么,这就是TLS警告告诉你的。

尝试将CURLOPT_SSL_VERIFYHOST设置为0或安装正确的证书。