¿Por qué PHP 5.6 cambió la forma en que maneja los certificados SSL?

1

Estaba usando PHPMailer para enviar un correo electrónico con SMTP. Esta vez utilicé PHP 5.6. Recibí el siguiente error.

Warning: stream_socket_enable_crypto(): 
Peer certificate CN='*.example1.com' did not match expected CN='mail.example2.com'
in /usr/share/php/libphp-phpmailer/class.smtp.php on line 344

Investigando esto me llevó a esta pregunta , que menciona los documentos de PHPMailer que dicen esto:

  

En un cambio de versiones anteriores, PHP 5.6 verifica los certificados en   Conexiones SSL. Si la configuración SSL del servidor al que se está conectando   no es correcto, aparecerá un error como este:

Tiene este trabajo alrededor sugerido:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Pero sigue diciendo

  

... esto no es recomendable:   También puedes cambiar estos   Configuraciones globales en tu php.ini, pero esa es una muy mala idea; PHP   5.6 hizo este cambio por muy buenas razones.

¿Cuáles son esas muy buenas razones?

    
pregunta Goose 20.10.2017 - 17:39
fuente

1 respuesta

4

Con PHP 5.6, el valor predeterminado para el uso de TLS finalmente se cambió para verificar los certificados de manera predeterminada y verificarlos correctamente (es decir, no solo la cadena de certificados sino también el nombre de host). Casi al mismo tiempo se realizaron cambios similares en Python (versión 2.7.9).

Estos cambios se realizaron porque el hecho de no verificar correctamente un certificado hace que la conexión sea vulnerable a los ataques del hombre en el medio. Pero, confiar en los desarrolladores para agregar la funcionalidad para verificar correctamente los certificados no funciona porque parece que funciona sin él también, por qué agregar trabajo adicional para hacerlo más seguro. Esto significa que tener el comportamiento seguro habilitado por defecto es la única opción aceptable. Además, Python y PHP ni siquiera tenían una forma de verificar correctamente los certificados antes, es decir, todo lo que podrían hacer es verificar la cadena de certificados pero no el nombre de host.

Probablemente no sea una coincidencia que estos cambios se realizaran mientras muchos sitios cambiaron a HTTPS después del caso Snowden y porque las revelaciones de este asunto mostraron que detectar y secuestrar conexiones mal protegidas no era solo una cosa teórica sino que el gobierno Las agencias realmente lo utilizaron.

    
respondido por el Steffen Ullrich 20.10.2017 - 19:12
fuente

Lea otras preguntas en las etiquetas