desde consola comando php linux ssl curl pci-dss

php - consola - ¿es posible POST/GET datos a TLSv1.1+sitio seguro sin curl y wget?



curl windows (6)

¿Hay alguna solución, alguna opción de cómo conectar TLSv1.1 + servidor seguro sin usar las bibliotecas integradas?

Puedo pensar en cinco soluciones alternativas:

1) Es posible (pero complicado) tener múltiples versiones de OpenSSL (o incluso Curl) instaladas. Incluso puede usar LD_PRELOAD_LIBRARY para crear una biblioteca de uso binario existente desde otro lugar. Creo que esta es una manera desordenada de hacerlo.

2) Esto sería realmente simple con Docker. Desafortunadamente, requiere un núcleo moderno, por lo que probablemente no pueda instalarlo en su servidor. Pero podría instalar un sistema operativo más moderno, luego instalar su servidor en un contenedor Docker con el sistema operativo anterior. Pero esto puede ser tanto trabajo como mover su sitio web a un sistema operativo más nuevo.

3) En lugar de Docker, solo usa chroot . En un cuadro más nuevo, use "ldd" para buscar todas las dependencias. Cópialos (más curl) en un chroot. Copie ese directorio en su servidor y ejecute "chrooot dir curl". El binario verá las bibliotecas y el trabajo más nuevos. Esto solo demorará unos minutos en configurarse para alguien que sepa lo que está haciendo.

4) Use una versión de curl enlazada estáticamente que tenga un OpenSSL compilado más nuevo.

5) Use un programa que no use OpenSSL. Por ejemplo, algunos programas go (lang) usan su propio cifrado y compilan a un binario estático. Por ejemplo: https://github.com/astaxie/bat

Los primeros 2 pueden ser un poco prácticos en su configuración, pero cualquiera de los 3 últimos funcionará.

Estoy en esta situación muy desafortunada:

  • Mi sitio web usa software obsoleto (se aplican parches de seguridad) con OpenSSL 0.9.8o 01 jun 2010 que no es compatible con TLSv1.1 / 1.2
  • También tengo una pasarela de pago que es compatible con PCI DSS, por lo tanto, el SSL y el TLS inicial están desactivados allí.

Mi sitio web solía intercambiar datos con la pasarela de pago pero a medida que TLSv1.0 se descarta, ya no puedo usar la biblioteca cURL de php o incluso file_get_contents() (o wget / lynx / curl mediante shell)

¿Hay alguna solución, alguna opción de cómo conectar TLSv1.1 + servidor seguro sin usar las bibliotecas integradas?

Sé que existen algunas clases en PHP como phpseclib, que es un cliente SSH, ideal para personas que no pueden usar el módulo SSH2

¿Existe algo así para PHP? ¿Hay alguna manera de conectarme a mi puerta de enlace?

Hasta ahora, mi mejor idea es conectarme a la puerta de enlace a través de otro servidor (con el software actualizado)


Encontré otra solución.

En un servidor seguro configuré dos VirtualHosts: 443 para TLSv1.2 y otro para mi sitio web solo con TLSv1.0.

Más información aquí: https://serverfault.com/a/692894/122489

Gracias por todas las respuestas.


Iba a sugerir Stunnel. PERO dafyc bien notado.

Esas restricciones PCI no se implementan para desacelerar a la gente (solo ... jajaja). Ellos existen para protección.

Resolverás tu problema con Stunnel. Pero, ¿por qué no actualizar el servidor del sitio web?

Ha identificado la fecha de vencimiento de SSL, pero como servidor, habrá otros errores disponibles.

Si exploran alguna otra debilidad y obtienen acceso a la raíz, tendrán una contraseña de stunnel para comenzar a explorar lo que hay en la tubería.

Por lo tanto, esto no parece lo suficientemente bueno como para garantizar la fiabilidad que PCI quiere que tengas.


Me gustó su idea inicial de proxying a otro servidor, excepto que está eludiendo las restricciones de seguridad impuestas por la puerta de enlace, y cuando se trata de información de pago, eso probablemente no es una idea.

Sin embargo, si puede ejecutar una instancia de Vagrant en su propio servidor que tiene bibliotecas actualizadas, puede realizar un proxy de la solicitud insegura a la instancia Vagrant en localhost y no abandona el cuadro, luego desde la instancia Vagrant que tiene bibliotecas actualizadas. la comunicación segura a su puerta de enlace.


Una vez que utilicé la utilidad llamada stunnel para mi cliente que no es TLS, cito desde el sitio web:

Stunnel es un proxy diseñado para agregar funcionalidad de cifrado TLS a clientes y servidores existentes sin ningún cambio en el código de los programas. Su arquitectura está optimizada para la seguridad, la portabilidad y la escalabilidad (incluido el equilibrio de carga), por lo que es adecuada para grandes despliegues.


Ya he publicado una respuesta, pero he leído en los comentarios que no puedes instalar ninguna herramienta en el servidor. Puede usar funciones nativas de PHP llamadas PHP Streams . Este es un ejemplo de código para la antigua API de Twitter:

$url = ''https://api.twitter.com/1/statuses/public_timeline.json''; $contextOptions = array( ''ssl'' => array( ''verify_peer'' => true, ''cafile'' => ''/etc/ssl/certs/ca-certificates.crt'', ''verify_depth'' => 5, ''CN_match'' => ''api.twitter.com'', ''disable_compression'' => true, ''SNI_enabled'' => true, ''ciphers'' => ''ALL!EXPORT!EXPORT40!EXPORT56!aNULL!LOW!RC4'' ) ); $sslContext = stream_context_create($contextOptions); $result = file_get_contents($url, NULL, $sslContext);