TLS 1.2 在 cURL 中不起作用 [英] TLS 1.2 not working in cURL
问题描述
我在卷曲使用 TLS1.2 的 HTTPS url 时遇到问题,在我的 curl 操作中,我将登录数据发布到网站并将其保存在 cookiefile 中.我收到的错误信息是这个
错误:14077438:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 警报内部错误
我已经尝试将 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);如果 ($loginp === FALSE) {死(卷曲错误($setuploginurl));}curl_close ($setuploginurl);var_dump ($loginp);
CURLOPT_SSLVERSION
值必须使用整数值,不是上面列出的字符串>
试试这个:
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);//常量非字符串值
http://php.net/manual/en/function.curl-setopt.php
value 应该是以下选项参数值的整数:CURLOPT_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)
I am having trouble curling an HTTPS url that uses TLS1.2, in my curl operation I post my login data into the website and save it in cookiefile. The error message I am getting is this
error:14077438:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert internal error
I have tried setting VERIFYPEER
and VERIFYHOST
to 0 but that does not seem to work, any suggestions?
Here are the versions I am using:
- OpenSSL version is 0.9.8b
- CURL version is 7.24.0
- PHP is 5.3
Here is the code:
$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);
You must use an integer value for the CURLOPT_SSLVERSION
value, not a string as listed above
Try this:
curl_setopt ($setuploginurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2); // constant NOT string value
http://php.net/manual/en/function.curl-setopt.php
value should be an integer for the following values of the option parameter:
CURLOPT_SSLVERSION
One of:
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)
这篇关于TLS 1.2 在 cURL 中不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!