Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php TLS 1.2不在卷曲中工作_Php_Ssl_Openssl_Php Curl - Fatal编程技术网

Php TLS 1.2不在卷曲中工作

Php TLS 1.2不在卷曲中工作,php,ssl,openssl,php-curl,Php,Ssl,Openssl,Php Curl,我在卷曲使用TLS1.2的HTTPS url时遇到问题,在卷曲操作中,我将登录数据发布到网站并保存在cookiefile中。 我收到的错误消息是 error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error 我已尝试将VERIFYPEER和VERIFYHOST设置为0,但似乎不起作用,有什么建议吗 以下是我正在使用的版本: OpenSSL版本为0.9.8b CURL版本是7.24.0 PHP是5.

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

 error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
我已尝试将
VERIFYPEER
VERIFYHOST
设置为0,但似乎不起作用,有什么建议吗

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

  • OpenSSL版本为0.9.8b
  • CURL版本是7.24.0
  • PHP是5.3
代码如下:

$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);

TLS 1.1和TLS 1.2自

仅支持强制TLS 1.1和1.2,因为


您应该考虑升级。

您必须为<代码> CurLoptTysSurvivs/Cuth>值,<强> > < >强> >上面列出的字符串

试试这个:

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // constant NOT string value

对于选项参数的以下值,值应为整数:
CURLOPT\u SSLVERSION

其中一项:

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)
替换以下内容

curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, 'CURL_SSLVERSION_TLSv1_2');


应该可以完美地工作。

在条带上下文中,我也有类似的问题:

错误:条带不再支持使用TLS 1.0发出的API请求。 请使用TLS 1.2或更高版本启动HTTPS连接。你可以学习 更多关于这方面的信息,请访问

使用CURL参数强制TLS1.2是暂时的解决方案,甚至由于缺少放置更新的空间而无法应用。默认情况下,TLS测试功能显示以下配置:

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

然后看到这个,

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用户:(在2017年6月底之前更新)

TLS 1.2
仅在
OpenSSL 1.0.1
之后才受支持(请参见),您必须更新
OpenSSL


无需设置
CURLOPT\u SSLVERSION
选项。请求涉及握手,握手将应用最新的
TLS
版本,包括服务器和客户端支持。您请求的服务器使用的是
tls1.2
,因此如果您的
OpenSSL
版本是(或更新于)
1.0.1
,那么您的
php\u curl
也将使用
tls1.2
(默认情况下),您应该使用2作为CURLOPT\u SSL\u VERIFYHOST,不是1。我不知道这是否是自动的,但切换到PHP v 5.6.33解决了我的问题。Curl还仅在版本升级到OpenSSL 1.0.1时向TLS 1.2添加了支持,为我解决了类似的问题。必须通过yum更新nss OpenSSL Curl才能在Centos 6.4上运行。@LPPapillon非常感谢!)这也为我修复了错误:)@channele您指定的文档用于强制tls 1.2。Libcurl在早期版本中支持此协议。您仍然可以使用
CURL\u SSLVERSION\u TLSv1\u 2
——只需要是一个常量,即不带引号<代码>curl\u setopt($setuploginurl、curl\u SSLVERSION、curl\u SSLVERSION\u TLSv1\u 2)适用于me.CURL\u SSLVERSION\u TLSv1\u 2这可从PHP5.5.19获得,在PHP5.3中它不起作用。TX发布这篇文章太多了。。。帮帮我@KavinD常量是在5.5.19和5.6.3版本中首次添加到PHP的。只是想添加一点,在此之后需要重新启动apache。谢谢你不要这样做。你正在硬编码一个对阅读你代码的人来说毫无意义的整数。取而代之的是,去掉撇号,使用常量。
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