Come testare l’autenticazione SMTP e StartTLS

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:

sudo apt-get install opensslsudo yum install openssl
Code language: Bash (bash)

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:

perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
Code language: Perl (perl)

Non devi dimenticare di sfuggire al carattere @ con una barra (\), altrimenti sarà interpretato come un array. La stringa codificata in base64 sarà qualcosa come:

AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Bash (bash)

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:

echo -ne '\[email protected]\0password' | base64
Code language: Bash (bash)

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:

openssl s_client -connect smtp.example.com:25 -starttls smtp
Code language: Bash (bash)

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:

EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
Code language: YAML (yaml)

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:

AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Nginx (nginx)

Se tutto va bene, il server SMTP riporta un’autenticazione riuscita:

235 2.7.0 Authentication successful
Code language: YAML (yaml)

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 o c:\OpenSSL-Win64, a seconda del bitness
  • scompattare strawberry-perl-5.18.2.2-32bit.zip o strawberry-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:

  1. 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:

perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
Code language: Perl (perl)

In questo esempio l’output è

AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk

Connettiti al tuo server SMTP con openssl.exe, e ripetere i passaggi precedenti con EHLO e AUTH PLAIN:

c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
Code language: PowerShell (powershell)

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:

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
Code language: Bash (bash)

Verifica certificato HTTPS TLS/SSL
Utilizza openssl per controllare e verificare le connessioni HTTPS:

openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
Code language: Bash (bash)

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:

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
Code language: Bash (bash)

HTH! 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *