Php TLS 1.2不在卷曲中工作
我在卷曲使用TLS1.2的HTTPS url时遇到问题,在卷曲操作中,我将登录数据发布到网站并保存在cookiefile中。 我收到的错误消息是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.
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