Dans mon PHP app, j'utilise les liens CURL et openssl de PHP pour communiquer et parler à l'aide de SOAP. Jusqu'à présent, le serveur distant prenait en charge SSL et TLS mais, à cause du bogue "poodle", l'administrateur a décidé de désactiver SSL et utilisez uniquement TLS. SSL est pris en charge jusqu'à la fin janvier.
J'ai changé mon code en ajoutant:
curl_setopt($objCurl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);
Cela devrait théoriquement obliger curl à utiliser TLSv1.2.
Mais c’est la théorie - je dois vérifier qu’il utilise réellement TLS - existe-t-il une méthode pour cela? Il existe une méthode appelée curl_getinfo (), mais les informations qu’elle renvoie ne me sont pas utiles:
[url] => https://www.example.com/soap/MessagingPort
[content_type] => text/xml;charset=utf-8
[http_code] => 200
[header_size] => 293
[request_size] => 882
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.164487
[namelookup_time] => 3.4E-5
[connect_time] => 3.4E-5
[pretransfer_time] => 0.000122
[size_upload] => 604
[size_download] => 178
[speed_download] => 1082
[speed_upload] => 3672
[download_content_length] => 178
[upload_content_length] => 604
[starttransfer_time] => 0.164477
[redirect_time] => 0
Merci d'avance
Réponse courte
Faites une demande avec curl to https://www.howsmyssl.com/
<?php
$ch = curl_init('https://www.howsmyssl.com/a/check');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($ch);
curl_close($ch);
$json = json_decode($data);
echo $json->tls_version;
cela devrait indiquer la version utilisée par TLS pour se connecter.
Creuser plus profondément
Curl s’appuie sur la bibliothèque OpenSSL (ou NSS) sous-jacente pour négocier la connexion sécurisée. Je pense donc que la bonne question à poser ici est de savoir de quoi la bibliothèque OpenSSL est capable. S'il peut gérer une connexion TLS, alors curl peut gérer une connexion TLS.
Alors, comment savoir ce dont la bibliothèque openssl (ou NSS) est capable?
<?php
$curl_info = curl_version();
echo $curl_info['ssl_version'];
qui va vider quelque chose comme
OpenSSL/1.0.1k
Vous pouvez ensuite consulter les notes de publication de cette version et voir si elles incluent la prise en charge de TLS.
Notes de publication OpenSSL - https://www.openssl.org/news/changelog.html
Notes de publication NSS - https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_Releases
Alerte spoiler
Utilisez https://tlstest.Paypal.com :
Par exemple:
$ curl https://tlstest.Paypal.com/
ERROR! Connection is using TLS version lesser than 1.2. Please use TLS1.2
$ ./src/curl https://tlstest.Paypal.com/
Paypal_Connection_OK