Perché PHP 5.6 ha cambiato il modo in cui gestisce i certificati SSL?

1

Stavo usando PHPMailer per inviare un'email con SMTP. Questa volta ho usato PHP 5.6. Ho ricevuto il seguente errore.

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

La ricerca di questo mi ha portato a questa domanda , che menziona i documenti di PHPMailer che dicono questo:

In a change from earlier versions, PHP 5.6 verifies certificates on SSL connections. If the SSL config of the server you are connecting to is not correct, you will get an error like this:

Questo suggerimento è stato suggerito:

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

Ma continua a dire

...this is not recommended: You can also change these settings globally in your php.ini, but that's a really bad idea; PHP 5.6 made this change for very good reasons.

Quali sono questi ottimi motivi?

    
posta Goose 20.10.2017 - 17:39
fonte

1 risposta

4

Con PHP 5.6 il valore predefinito per l'utilizzo di TLS è stato infine modificato per verificare i certificati per impostazione predefinita e verificarli correttamente (vale a dire non solo la catena di certificati ma anche il nome host). Circa allo stesso tempo modifiche simili a quelle fatte in Python (versione 2.7.9).

Queste modifiche sono state apportate perché il controllo non corretto di un certificato rende la connessione vulnerabile agli attacchi man in the middle. Ma fare affidamento sugli sviluppatori per aggiungere la funzionalità per controllare correttamente i certificati non funziona perché sembra funzionare senza troppo, quindi perché aggiungere ulteriore lavoro per renderlo più sicuro. Ciò significa che avere il comportamento sicuro abilitato di default è l'unica opzione accettabile. Inoltre, sia Python che PHP non avevano nemmeno un modo per controllare correttamente i certificati, cioè tutto ciò che potevano in modo semplice è controllare la catena di certificati ma non il nome host.

Probabilmente non è una coincidenza che questi cambiamenti siano stati apportati mentre molti siti sono passati a HTTPS all'indomani del caso Snowden e perché le rivelazioni di questo affare hanno dimostrato che sniffare e dirottare connessioni impropriamente protette non era solo una questione teorica, ma quel governo le agenzie effettivamente ne hanno fatto uso.

    
risposta data 20.10.2017 - 19:12
fonte

Leggi altre domande sui tag