首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TLS1.2在cURL中不起作用

TLS1.2在cURL中不起作用
EN

Stack Overflow用户
提问于 2015-05-10 05:14:42
回答 5查看 119K关注 0票数 25

我在卷曲一个使用TLS1.2的HTTPS url时遇到了问题,在我的curl操作中,我将我的登录数据发布到网站并将其保存在cookiefile中。我得到的错误消息是

代码语言:javascript
复制
 error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error

我已经尝试将VERIFYPEERVERIFYHOST设置为0,但似乎不起作用,有什么建议吗?

以下是我正在使用的版本:

  • OpenSSL版本为0.9.8b
  • CURL版本为7.24.0
  • PHP为5.3

代码如下:

代码语言:javascript
复制
$setuplogin = curl_init(); 
curl_setopt ($setuploginurl, CURLOPT_URL, $url); 
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt ($setuploginurl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt ($setuploginurl, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');
curl_setopt ($setuploginurl, CURLOPT_POSTFIELDS, 'username=uname&password=pword&act=login&submit=Login');
curl_setopt ($setuploginurl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36"); 
curl_setopt (setuploginurl, CURLOPT_TIMEOUT, 60); 
curl_setopt ($setuploginurl, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt ($setuploginurl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($setuploginurl,  CURLOPT_HEADER, 1);
curl_setopt ($setuploginurl,CURLOPT_ENCODING,"gzip");
curl_setopt ($setuploginurl, CURLOPT_POST, true);
curl_setopt ($setuploginurl, CURLOPT_COOKIEJAR, 'cookies.txt'); 
curl_setopt ($setuploginurl, CURLOPT_FRESH_CONNECT , 1);

$loginp= curl_exec($setuploginurl); 
if ($loginp === FALSE) {
    die(curl_error($setuploginurl));
}

curl_close ($setuploginurl); 
var_dump ($loginp);
EN

回答 5

Stack Overflow用户

发布于 2015-10-04 03:50:12

如上所述,必须使用整数值作为CURLOPT_SSLVERSION值,而不是a string

试试这个:

代码语言:javascript
复制
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // constant NOT string value

http://php.net/manual/en/function.curl-setopt.php

option参数的下列值应为整数:CURLOPT_SSLVERSION

其中之一:

代码语言:javascript
复制
CURL_SSLVERSION_DEFAULT (0)
CURL_SSLVERSION_TLSv1 (1)
CURL_SSLVERSION_SSLv2 (2)
CURL_SSLVERSION_SSLv3 (3)
CURL_SSLVERSION_TLSv1_0 (4)
CURL_SSLVERSION_TLSv1_1 (5)
CURL_SSLVERSION_TLSv1_2 (6)
票数 54
EN

Stack Overflow用户

发布于 2015-05-10 05:30:54

OpenSSL 1.0.1开始支持TLS1.1和TLS1.2

强制TLS1.1和1.2仅在curl 7.34.0之后受支持

你应该考虑升级。

票数 27
EN

Stack Overflow用户

发布于 2017-03-09 07:09:43

我也遇到过类似的问题:

错误:条带不再支持使用TLS1.0发出的请求。请使用TLS 1.2或更高版本启动HTTPS连接。你可以在https://stripe.com/blog/upgrading-tls了解更多关于这方面的信息。

使用CURL参数强制TLS 1.2是临时解决方案,甚至因为没有空间进行更新而无法应用。默认情况下,TLS测试函数https://gist.github.com/olivierbellone/9f93efe9bd68de33e9b3a3afbd3835cf显示如下配置:

代码语言:javascript
复制
SSL version: NSS/3.21 Basic ECC
SSL version number: 0
OPENSSL_VERSION_NUMBER: 1000105f
TLS test (default): TLS 1.0
TLS test (TLS_v1): TLS 1.2
TLS test (TLS_v1_2): TLS 1.2

我使用以下命令更新库:

yum更新nss curl openssl

然后看到了这个:

代码语言:javascript
复制
SSL version: NSS/3.21 Basic ECC
SSL version number: 0
OPENSSL_VERSION_NUMBER: 1000105f
TLS test (default): TLS 1.2
TLS test (TLS_v1): TLS 1.2
TLS test (TLS_v1_2): TLS 1.2

请注意,默认TLS版本已更改为1.2!这是一个全局解决的问题。这也将帮助PayPal用户:https://www.paypal.com/au/webapps/mpp/tls-http-upgrade (在2017年6月底之前更新)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30145089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档