php ssl curl https nss

PHP Curl(con NSS) probablemente esté usando SSLv3 en lugar de TLS cuando se conecta a https



(4)

Ese es un problema interesante.

Si consulta SSLLabs para este sitio, verá que solo es compatible con varias cifras ECDHE-ECDSA- * y ningún otro sistema de cifrado. Pero, en el historial de versiones de curl , encontrará un error con los sistemas de cifrado ECC y la biblioteca NSS (que usa) que solo está corregido en la versión curl 7.36 "nss: permita usar cifras ECC si NSS las implementa" .

Como está utilizando Curl 7.19.7, su curvatura es demasiado antigua para usar las cifras necesarias junto con la biblioteca NSS. Esto significa que necesita actualizar su biblioteca Curl.

Estoy usando la biblioteca curl (con NSS) en PHP para conectarme a mi otro servidor. Todo estuvo bien hasta la semana pasada, cuando el servidor de destino dejó de soportar SSLv3 debido a la vulnerabilidad poodle (CloudFlare por cierto). Ahora, intento hacer la conexión usando TLS, pero sigo recibiendo un "error de conexión SSL".

Hay un código de muestra, estoy 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);

Según tengo entendido, establecer CURLOPT_SSLVERSION en 1 debe forzar la conexión a través de TLS.

Nota: Tengo CURLOPT_SSL_VERIFYPEER => false solo para la depuración y no quiero dejarlo ahí, una vez que resuelvo este problema.

Esto es resultado:

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

Tengo todo esto en el proveedor de alojamiento compartido, por lo que no puedo cambiar ninguna configuración de php.ini ni actualizar ningún componente. Todo lo que tengo es phpinfo (). Revisé el soporte de TLS en la versión de estos componentes y debería estar bien. Aquí hay un extracto de 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

Creo que ese problema es el uso de SSLv3 en lugar de TLS, pero no estoy 100% seguro. Todo lo que estoy tratando es "Error de conexión SSL" y no sé cómo averiguar qué versión de SSL se utilizó para conectar.

¿Hay alguna manera, cómo comprobar, qué versión SSL se utiliza para la conexión? ¿O me estoy perdiendo algo?

Gracias por cualquier consejo!


Tengo Curl 7.21.7 y PHP 5.4.34, y esto pareció ser el truco para mí:

curl_setopt($curl_request, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);

Obtenga más información aquí , aunque no dice cuándo se introdujo CURL_SSLVERSION_TLSv1.


La respuesta para mí fue usar un valor entero en lugar de una cadena ... es decir: Cambiar:

curl_setopt($ch, CURLOPT_SSLVERSION_TLSv1_2);

A:

curl_setopt($ch, CURLOPT_SSLVERSION, 6);

O para tlsv1_1:

curl_setopt($ch, CURLOPT_SSLVERSION, 5);

Aquí está la lista completa:

CURL_SSLVERSION_DEFAULT (0) CURL_SSLVERSION_TLSv1 (1) CURL_SSLVERSION_SSLv2 (2) CURL_SSLVERSION_SSLv3 (3) CURL_SSLVERSION_TLSv1_0 (4) CURL_SSLVERSION_TLSv1_1 (5) CURL_SSLVERSION_TLSv1_2 (6)

Estoy ejecutando lo siguiente por cierto:

curl-7.19.7-46.el6.x86_64 nss-3.21.0-0.3.el6_7.x86_64