Come testare l’autenticazione SMTP e StartTLS usando la riga di comando?
Quando si investigano problemi di autenticazione SMTP, in particolare su connessioni SMTP criptate TLS, è sempre utile essere in grado di testare l’autenticazione SMTP e la connessione StartTLS. Preferibilmente dalla linea di comando. Questo post mostra come testare i server SMTP, verificare l’autenticazione SMTP e le connessioni criptate StartTLS dalla linea di comando di Linux e Windows.
Autenticazione SMTP#
L’autenticazione SMTP è il meccanismo con cui i clienti di un ISP si identificano al server di posta attraverso il quale intendono inviare e-mail.
L’Autenticazione SMTP, spesso abbreviata SMTP AUTH, è un’estensione del Simple Mail Transfer Protocol con cui un client SMTP può accedere utilizzando un meccanismo di autenticazione scelto tra quelli supportati dal server SMTP.
Che cos’è Transport Layer Security (TLS)?
Transport Layer Security (TLS) e il suo predecessore, Secure Sockets Layer (SSL), sono protocolli crittografici progettati per fornire sicurezza nelle comunicazioni su Internet. Usano i certificati X.509 e quindi la crittografia asimmetrica per assicurare la controparte con cui stanno comunicando, e per scambiare una chiave simmetrica.
Testare le connessioni TLS e SMTP AUTH dalla linea di comando di Linux e Windows#
La maggior parte dei problemi SMTP e di invio della posta derivano dal fatto che la combinazione di nome utente e password di accesso non è corretta, il server di posta non supporta StartTLS, o il meccanismo di autenticazione utilizzato è sbagliato.
Individuiamo, testiamo e verifichiamo tutti.
Essere in grado di verificare le connessioni criptate (Start)TLS con OpenSSL, e le opzioni SMTP AUTH, è ideale per quando si hanno problemi con i moduli di posta elettronica che inviano e-mail utilizzando SMTP autenticato, su una connessione criptata TLS (da un sito web).
Per verificare l’autenticazione SMTP su TLS, avete bisogno del client OpenSSL:
Code language: Bash (bash)sudo apt-get install opensslsudo yum install openssl
Create SMTP AUTH log-in information with Perl#
Prima di poter testare l’autenticazione SMTP AUTH PLAIN su TLS, dovete creare le informazioni di log-in. Le informazioni di accesso sono il tuo nome utente (indirizzo email) e la password, e un carattere speciale \0
. Normalmente questo è un indirizzo email e la sua password.
Per creare la combinazione – che deve essere codificata in base64 – puoi usare Perl:
Code language: Perl (perl)perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
Non devi dimenticare di sfuggire al carattere @
con una barra (\
), altrimenti sarà interpretato come un array. La stringa codificata in base64 sarà qualcosa come:
Code language: Bash (bash)AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Informazioni sul log-in di AUTH con Bash#
Non avete necessariamente bisogno di Perl per generare un hash di log-in, potete usare anche Bash:
Code language: Bash (bash)echo -ne '\[email protected]\0password' | base64
Connettersi a un server SMTP con openssl in bash#
In bash ora potete usare il comando openssl
, come spiegato di seguito, per impostare una connessione criptata TLS con il vostro server SMTP:
Code language: Bash (bash)openssl s_client -connect smtp.example.com:25 -starttls smtp
Questo dà un sacco di output verboso, non preoccuparti 🙂
Quando la connessione è stabilita, noterai un codice SMTP 250:
250 DSN
Questo significa che puoi iniziare la tua transazione SMTP. Usa EHLO
per lasciare che il server SMTP stampi i verbi supportati:
Code language: YAML (yaml)EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
Qui si nota AUTH PLAIN LOGIN
come metodo di login. Il server di posta SMTP supporta il meccanismo di autenticazione che desideri. Le tue informazioni complete di nome utente e password di accesso sono avvolte nella stringa codificata in base64. Usatele per autenticarvi:
Code language: Nginx (nginx)AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Se tutto va bene, il server SMTP riporta un’autenticazione riuscita:
Code language: YAML (yaml)235 2.7.0 Authentication successful
Perché la combinazione di nome utente e password è codificata in base64 e viene inviata in chiaro, avete bisogno della crittografia StartTLS/TLS per proteggere la vostra connessione SMTP.
Prop: Ecco come inviare email SMTP autenticate su TLS da WordPress! E come inviare SMTP autenticato su una connessione criptata TLS, in PHP, ASP e ASP.NET. Bello! 🙂
Come installare OpenSSL e Perl su Windows#
Per fare tutto ciò su Windows Server o Windows 8.1 o 10, è necessario scaricare e installare il client OpenSSL e Perl (io uso Strawberry Perl):
- Win32 OpenSSL Installation Project (scegliere il gusto giusto)
- Strawberry Perl Releases (io uso l’edizione ZIP che non richiede installazione)
- Installare OpenSSL in
c:\OpenSSL-Win32
oc:\OpenSSL-Win64
, a seconda del bitness - scompattare
strawberry-perl-5.18.2.2-32bit.zip
ostrawberry-perl-5.18.2.2-64bit.zip
e copiare la cartella in c:\Perl per esempio
Configura il tuo ambiente Windows OpenSSL#
Ora configura il tuo ambiente OpenSSL in Windows per prevenire openssl.cnf
avvertimenti:
- alla linea di comando cmd.exe, digitare
set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg
. Questo eviterà un messaggio di errore:WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Creare informazioni di accesso SMTP AUTH e connettersi a un server SMTP con Perl/openssl in Windows#
Utilizzare il seguente comando Perl per generare la stringa di accesso codificata in base64. Notate le virgolette:
Code language: Perl (perl)perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
In questo esempio l’output è
AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk
Connettiti al tuo server SMTP con openssl.exe
, e ripetere i passaggi precedenti con EHLO
e AUTH PLAIN
:
Code language: PowerShell (powershell)c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
Bonus: verificare StartTLS per server SMTP-, POP3- o IMAP – controllare i certificati HTTPS TLS/SSL#
Per verificare se il vostro server di posta (SMTP-, POP3-, o IMAP) supporta StartTLS, usate il seguente comando OpenSSL:
Code language: Bash (bash)openssl s_client -connect imap.example.com:143 -starttls imapopenssl s_client -connect pop.example.com:110 -starttls pop3openssl s_client -connect smtp.example.com:25 -starttls smtp
Verifica certificato HTTPS TLS/SSL
Utilizza openssl
per controllare e verificare le connessioni HTTPS:
Code language: Bash (bash)openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
Sostituisci host con la tua intestazione o nome di dominio, e 203.0.113.15 con l’indirizzo IP del tuo server web.
Propio: controlla la data di scadenza del certificato SSL.
Questo one-liner controlla la data di scadenza del certificato SSL, dalla linea di comando Linux usando openssl
:
Code language: Bash (bash)echo | openssl s_client -connect mx.example.com:25 -starttls smtp | openssl x509 -noout -datesecho | openssl s_client -connect ftp.example.com:21 -starttls ftp | openssl x509 -noout -dates
HTH! 🙂