我正在使用PHP中的curl库(带有NSS)连接到我的其他服务器。一切都很顺利,直到上周目标服务器由于poodle漏洞停止支持SSLv3(顺便说一下,是CloudFlare)。现在,我正在尝试使用TLS进行连接,但仍然出现“SSL连接错误”。
这是我使用的示例代码:
$ch = curl_init();
curl_setopt_array( $ch, array(
CURLOPT_URL => 'https://www.lumiart.cz',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_SSLVERSION => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_VERBOSE => true
) );
$output = curl_exec( $ch );
echo $output;
print_r( curl_getinfo( $ch ) );
echo 'error:' . curl_error( $ch );
curl_close($ch);
根据我的理解,将CURLOPT_SSLVERSION
设置为1
应该可以强制使用TLS连接。注意:我设置
CURLOPT_SSL_VERIFYPEER => false
只是为了调试,不打算让它保留,一旦我解决了这个问题就会去掉它。这是输出内容:
Array
(
[url] => https://www.lumiart.cz
[content_type] =>
[http_code] => 0
[header_size] => 0
[request_size] => 0
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0
[namelookup_time] => 2.3E-5
[connect_time] => 0.005777
[pretransfer_time] => 0
[size_upload] => 0
[size_download] => 0
[speed_download] => 0
[speed_upload] => 0
[download_content_length] => -1
[upload_content_length] => -1
[starttransfer_time] => 0
[redirect_time] => 0
[certinfo] => Array
(
)
[primary_ip] => 2400:cb00:2048:1::681c:86f
[redirect_url] =>
)
error:SSL connect error
我将所有东西放在共享托管提供商上,所以我无法更改任何php.ini配置或更新任何组件。我只有phpinfo()。
我已经检查了这些组件版本的TLS支持情况,应该是可以的。以下是phpinfo摘录:
PHP Version 5.4.32
System Linux wl42-f262 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64
curl:
cURL support enabled
cURL Information 7.19.7
Age 3
Features
AsynchDNS No
Debug No
GSS-Negotiate Yes
IDN Yes
IPv6 Yes
Largefile Yes
NTLM Yes
SPNEGO No
SSL Yes
SSPI No
krb4 No
libz Yes
CharConv No
Protocols tftp, ftp, telnet, dict, ldap, ldaps, http, file, https, ftps, scp, sftp
Host x86_64-redhat-linux-gnu
SSL Version NSS/3.15.3
ZLib Version 1.2.3
libSSH Version libssh2/1.4.2
我认为问题在于使用了SSLv3而不是TLS,但我并不100%确定。我只得到了“SSL连接错误”的信息,我不知道如何找出连接使用了哪个SSL版本。
有没有一种方法可以检查连接使用的SSL版本?还是我漏掉了什么?