Sto utilizzando la libreria di arricciatura (con NSS) in PHP per connettersi al mio altro server. Tutto andava bene fino alla scorsa settimana, quando il server di destinazione ha smesso di supportare SSLv3 a causa della vulnerabilità dei barboncini (CloudFlare tra l'altro). Ora, sto cercando di effettuare la connessione utilizzando TLS, ma sto ancora ricevendo "Errore di connessione SSL".PHP Curl (con NSS) sta probabilmente utilizzando SSLv3 insted di TLS durante la connessione a https
C'è codice di esempio, sto usando:
$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);
Dalla mia comprensione, l'impostazione CURLOPT_SSLVERSION
a 1
dovrebbe forzare la connessione tramite TLS.
Nota: ho il CURLOPT_SSL_VERIFYPEER => false
solo per il debug e non intendo lasciarlo lì, una volta risolto questo problema.
Questo è uscita:
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
Ho tutto questo a provider di hosting condiviso, quindi non posso modificare alcuna configurazione php.ini o aggiornare qualsiasi componente. Tutto quello che ho è phpinfo(). Ho controllato il supporto TLS per la versione di questi componenti e dovrebbe andare bene. Ecco stralcio di 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
penso, che il problema è l'utilizzo di SSLv3, invece di TLS, ma non sono sicuro al 100%. Tutto quello che sto ottenendo è "Errore di connessione SSL" e non so, come scoprirlo, quale versione SSL è stata utilizzata per connettersi.
C'è un modo, come verificare, quale versione SSL viene utilizzata per la connessione? O mi sta sfuggendo qualcosa?
Grazie per qualsiasi consiglio!
"Non posso cambiare qualsiasi configurazione php.ini o aggiornare qualsiasi componente" - ma il vostro ospite può, e sono più o meno obbligato a problemi di sicurezza come questo, quindi dovresti parlare anche con loro. Ho avuto un problema simile in Java un po 'di tempo fa, quando usava l'handshake SSLv3, anche se era consentito usarlo solo per negoziare TLSv1 +, e il server con cui stavo parlando rifiutava di accettare SSLv3 anche per l'handshake, quindi potrebbe essere il problema qui, ma non saprei come dire scusa. – Rup
Grazie, ho controllato la versione di quei componenti (php, curl, NSS), e tutti dovrebbero andare bene con il supporto TLS. Non sono così obsoleti, quindi non so, se l'aggiornamento farebbe la differenza anche se convincessi il mio ospite a farlo. – Lapak
@Lapak l'hai capito? Sto provando a connettermi a un server con TLS poiché ha disabilitato SSL, ma non mi sembra che mi consenta. – LefterisL