php - requerir - Utilice cURL con SNI(Indicación del nombre del servidor)
sni movistar (2)
Junto con la biblioteca requerida y la versión de Curl, la solicitud debe usar resolverse para enviar SNI en el curl:
curl -vik --resolve example.com:443:198.18.110.10 https://example.com/
Estoy tratando de usar cURL para publicar en una API que acaba de comenzar a usar SNI (para que puedan alojar varios certificados ssl en 1 dirección IP).
Mi cURL dejó de funcionar como resultado de este movimiento a SNI. Explicaron que es porque cURL está recuperando * .domain-a.com en lugar de * .domain-b.com por lo que el SSL falla.
Esto parece ser un error en cURL porque la URL de la API no tiene errores cuando se visita desde un navegador.
Usando este código, funciona:
exec(''curl -k -d "parameters=here", https://urlhere.com/'', $output);
print_r($output);
Sin embargo, usar -k es malo porque no verifica el certificado SSL.
Usando este código, NO funciona:
exec(''curl -d "parameters=here", https://urlhere.com/'', $output);
print_r($output);
Entonces, mi pregunta es, ¿cómo puedo usar curl con SNI y aún verificar el SSL (no tengo que usar -k)? ¿Hay otra configuración en PHP o una opción de CURL que puedo configurar para solucionar esto?
Para poder usar SNI, se requieren tres condiciones:
- Utilizando una versión de Curl que lo admita, al menos 7.18.1, de acuerdo con los registros de cambios .
- Usar una versión de Curl compilada contra una biblioteca que admita SNI, por ejemplo, OpenSSL 0.9.8j (dependiendo de las opciones de compilación de algunas versiones anteriores).
- Usando TLS 1.0 al menos (no SSLv3).
Tenga en cuenta que el código de depuración de Curl ( -v
) solo muestra el número de versión principal (principalmente para distinguir entre los tipos de mensajes SSLv2 y SSLv3 +, vea ssl_tls_trace
), por lo que aún mostrará "SSLv3" cuando use TLS 1.0 o superior (porque De manera efectiva, SSL v3.1 o superior, 3 es el mismo número de versión principal).
Puede verificar que su versión instalada de curl pueda usar SNI usando Wireshark. Si realiza una conexión utilizando curl -1 https://something
, si expande el mensaje "Cliente Hola", debería poder ver una extensión " server_name
".
No estoy seguro de qué versión de SSL / TLS se usa de forma predeterminada (según las opciones de compilación) cuando usa curl
sin -1
(para TLS 1.0) o -3
(para SSLv3), pero puede intentar forzar -1
en Su comando, ya que no funcionará con SSLv3 de todos modos.