Tôi đang sử dụng thư viện curl (có NSS) trong PHP để kết nối với máy chủ khác của tôi. Mọi thứ đều ổn cho đến tuần trước, khi máy chủ đích dừng hỗ trợ SSLv3 do lỗ hổng của kẻ xáo trộn (CloudFlare bằng cách này). Bây giờ, tôi đang cố gắng để làm cho kết nối bằng cách sử dụng TLS, nhưng tôi vẫn nhận được "lỗi kết nối SSL".PHP Curl (có NSS) có thể đang sử dụng SSLv3 được tạo bởi TLS khi kết nối với https
Có mẫu mã, Tôi đang sử dụng:
$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);
Từ hiểu biết của tôi, thiết CURLOPT_SSLVERSION
để 1
nên buộc kết nối thông qua TLS.
Lưu ý: Tôi có CURLOPT_SSL_VERIFYPEER => false
chỉ để gỡ lỗi và tôi không có ý định để nó ở đó, khi tôi tìm ra vấn đề này.
Đây là kết quả:
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
Tôi có tất cả những điều này tại nhà cung cấp lưu trữ chia sẻ, vì vậy tôi không thể thay đổi bất kỳ cấu hình php.ini hoặc cập nhật bất kỳ thành phần. Tất cả những gì tôi có là phpinfo(). Tôi đã kiểm tra hỗ trợ TLS trên các phiên bản thành phần này và nó sẽ ổn. Đây là trích đoạn của 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
Tôi nghĩ rằng, vấn đề đó là sử dụng SSLv3 thay vì TLS, nhưng tôi không chắc chắn 100%. Tất cả tôi nhận được là "lỗi kết nối SSL" và tôi không biết, làm thế nào để tìm hiểu, phiên bản SSL nào được sử dụng để kết nối.
Có cách nào hay không, cách kiểm tra, phiên bản SSL nào được sử dụng để kết nối? Hay tôi đang thiếu một cái gì đó?
Cảm ơn lời khuyên nào!
"Tôi không thể thay đổi bất kỳ cấu hình php.ini hoặc cập nhật bất kỳ thành phần" - nhưng máy chủ của bạn có thể, và có nhiều hoặc ít hơn bắt buộc đối với các vấn đề bảo mật như thế này, do đó bạn cũng nên nói chuyện với họ. Tôi đã có một vấn đề tương tự trong Java một thời gian trở lại nơi nó mặc định để sử dụng bắt tay SSLv3 ngay cả khi nó chỉ được phép sử dụng nó thương lượng TLSv1 +, và máy chủ tôi đã nói để từ chối chấp nhận SSLv3 ngay cả cho cái bắt tay, để có thể vấn đề ở đây nhưng tôi sẽ không biết làm thế nào để nói xin lỗi. – Rup
Cảm ơn, tôi đã kiểm tra phiên bản của những thành phần đó (php, curl, NSS), và tất cả chúng đều tốt với hỗ trợ TLS. Họ không phải là lỗi thời, vì vậy tôi không biết, nếu cập nhật sẽ làm cho bất kỳ sự khác biệt ngay cả khi tôi thuyết phục chủ nhà của tôi để làm điều đó. – Lapak
@Lapak bạn đã tìm ra điều này? Tôi đang cố gắng để kết nối với một máy chủ với TLS vì nó vô hiệu hóa SSL nó chỉ sẽ không có vẻ để cho tôi. – LefterisL