web-dev-qa-db-fra.com

Vérifier si curl utilise TLS

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

42
kayo

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

  • openssl prend en charge TLS v1.1 et TLS v1.2 dans OpenSSL 1.0.1 [14 mars 2012]
  • NSS inclus la prise en charge de TLS v1.1 dans 3.14
  • NSS inclus la prise en charge de TLS v1.2 dans 3.15
92
Jeff Richards

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
5
kbulgrien