Con SSL / TLS va bene usare LOGIN
/ PLAIN
.
È necessario fornire SMTP su una connessione crittografata con SSL. Mentre alcuni schemi del tuo elenco (ad esempio DIGEST-MD5
) possono mantenere una password protetta anche su un canale non affidabile, non proteggeranno gli utenti da un aggressore man-in-the-middle che manomette la loro sessione. (In genere, i server di posta elettronica racchiudono SMTP tramite TLS diretto o un aggiornamento di connessione con STARTTLS alle porte 465/587 .)
Qualsiasi tipo di autenticazione SMTP, indipendentemente dal fatto che si usi PLAIN
o un metodo avanzato, fornisce solo autenticazione a livello di applicazione. Ma quello che si desidera è sicurezza del livello di trasporto . Dopo che un utente è stato autenticato tramite SMTP, non ci sarà alcuna connessione crittografata automaticamente. Secondo il protocollo SMTP, i comandi e le e-mail vengono scambiate con il server in testo normale, consentendo a un aggressore man-in-the-middle di leggere e modificare la comunicazione e iniettare nuovi comandi. Ecco perché dovresti fornirlo sulla crittografia SSL, proprio come HTTPS fornisce HTTP su SSL.
L'analogia HTTP: se proteggi il tuo sito web con HTTPS, non importa che il modulo di login trasmetta effettivamente la tua password come una stringa semplice nel corpo POST della richiesta HTTP, perché il trasporto dei dati è SSL- criptato. Abilitare CRAM-MD5
per SMTP è analogo all'implementazione di uno schema challenge-response in Javascript prima di trasmettere l'accesso credenziali per un sito web. (Puoi vedere occasionalmente quella tecnica nelle interfacce del router che non forniscono HTTPS ma non è molto comune.)
Come per un esempio di vita reale, GMail sta bene offrendo l'autenticazione LOGIN
/ PLAIN
(dove le credenziali sono inviate nel testo del piano) dopo aver stabilito una connessione SSL sicura:
$ openssl s_client -starttls smtp -connect smtp.gmail.com:587
...
250 SMTPUTF8
EHLO foo
250-smtp.gmail.com at your service, [127.0.0.1]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
250-ENHANCEDSTATUSCODES
250-PIPELINING
...
(Come puoi vedere, forniscono anche alcuni metodi che non hai elencato, ad esempio XOAUTH2
per i token OAuth2 che potrebbero essere interessanti se stai cercando l'autenticazione senza password.)