Como testar a autenticação SMTP e StartTLS usando a linha de comando?
Ao investigar problemas de autenticação SMTP, em particular sobre ligações SMTP encriptadas TLS, é sempre útil se for capaz de testar a autenticação SMTP e a ligação StartTLS. De preferência a partir da sua linha de comando. Este post mostra-lhe como testar servidores SMTP, verificar autenticação SMTP e ligações encriptadas StartTLS a partir da linha de comando Linux e Windows.
SMTP Authentication#
SMTP Authentication é o mecanismo através do qual os clientes de um ISP se identificam ao servidor de correio através do qual pretendem enviar correio electrónico.
p>SMTP A autenticação, frequentemente abreviada SMTP AUTH, é uma extensão do Protocolo de Transferência de Correio Simples através do qual um cliente SMTP pode iniciar sessão utilizando um mecanismo de autenticação escolhido entre os suportados pelo servidor SMTP.
O que é a Camada de Segurança de Transporte (TLS)?
p>Segurança da Camada de Transporte (TLS) e o seu predecessor, Secure Sockets Layer (SSL), são protocolos criptográficos concebidos para fornecer segurança na comunicação através da Internet. Utilizam o X.509 certificados e, consequentemente, criptografia assimétrica para assegurar a contraparte com quem comunicam, e para trocar uma chave simétrica.
Testar ligações TLS e SMTP AUTH a partir da linha de comando Linux e Windows#
Os problemas de SMTP e envio de correio provêm do facto de que ou a combinação de nome de utilizador e palavra-passe de acesso está incorrecta, o servidor de correio não suporta StartTLS, ou o mecanismo de autenticação utilizado está errado.
Endereços, testar e verificar todos eles.
P>Possibilidade de verificar ligações codificadas (Start)TLS com OpenSSL, e opções SMTP AUTH, é ideal para quando tiver problemas com formulários de correio electrónico que enviem correio electrónico usando SMTP autenticado, através de uma ligação codificada TLS (de um website).
Para verificar a autenticação SMTP sobre TLS, precisa do cliente OpenSSL:
Code language: Bash (bash)sudo apt-get install opensslsudo yum install openssl
Criar informação de login SMTP AUTH com Perl#
Antes de poder testar a autenticação SMTP AUTH PLAIN sobre TLS, precisa de criar informação de login. A informação de início de sessão é o seu nome de utilizador (endereço de correio electrónico) e palavra-chave, e um carácter especial \0
. Normalmente este é um endereço de correio electrónico e a sua palavra-passe.
Para criar a combinação – que tem de ser codificada com base64 – pode usar Perl:
Code language: Perl (perl)perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
Não se deve esquecer de escapar ao @
char com uma barra (\
), caso contrário será interpretado como um array. A string codificada base64 será algo como:
Code language: Bash (bash)AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
SMTP AUTH log-in information with Bash#
Você não precisa necessariamente de Perl para gerar um hash de log-in, você pode usar Bash também:
Code language: Bash (bash)echo -ne '\[email protected]\0password' | base64
Conectar a um servidor SMTP com openssl em bash#
Na bash pode agora usar o comando openssl
, como explicado abaixo, para configurar uma ligação encriptada TLS com o seu servidor SMTP:
Code language: Bash (bash)openssl s_client -connect smtp.example.com:25 -starttls smtp
Isto dá muita saída verbosa, não se preocupe 🙂
Quando a ligação for feita, notará um código SMTP 250:
250 DSN
Isto significa que pode iniciar a sua transacção SMTP. Use EHLO
para deixar o servidor SMTP imprimir os verbos suportados:
Code language: YAML (yaml)EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
Aí notará AUTH PLAIN LOGIN
como método de log-in. O servidor de correio SMTP suporta o mecanismo de autenticação que desejar. O seu nome de utilizador completo e informação de login com palavra-passe estão envolvidos na cadeia codificada base64. Use isso para autenticar:
Code language: Nginx (nginx)AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Se tudo correr bem, o servidor SMTP reporta uma autenticação bem sucedida:
Code language: YAML (yaml)235 2.7.0 Authentication successful
Porque a combinação de nome de utilizador e palavra-passe é codificada na base64, e é enviada em texto simples, necessita da encriptação StartTLS/TLS para assegurar a sua ligação SMTP.
Protip: Eis como enviar correio electrónico SMTP autenticado sobre TLS a partir do WordPress! E como enviar SMTP autenticado através de uma ligação encriptada TLS, em PHP, ASP e ASP.NET. Muito bem! 🙂
Como instalar OpenSSL e Perl no Windows#
A fim de realizar tudo o acima mencionado no Windows Server ou Windows 8.1 ou 10, é necessário descarregar e instalar o cliente OpenSSL e o Perl (eu uso o Strawberry Perl):
- Win32 OpenSSL Installation Project (choose the right flavor)
- Strawberry Perl Releases (Utilizo a edição ZIP que não requer instalação)
- Install OpenSSL to
c:\OpenSSL-Win32
ouc:\OpenSSL-Win64
, dependendo do bitness - Unzip
strawberry-perl-5.18.2.2-32bit.zip
oustrawberry-perl-5.18.2.2-64bit.zip
e copie a pasta para c:\Perl por exemplo
Configure o seu ambiente Windows OpenSSL#
Configure agora o seu ambiente OpenSSL no Windows para prevenir openssl.cnf
avisos:
- no cmd.exe linha de comando, digite
set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg
. Isto irá evitar uma mensagem de erro:WARNING: can't open config file: /usr/local/ssl/openssl.cnf
Criar informação de log-in SMTP AUTH e ligar a um servidor SMTP com Perl/openssl no Windows#
Utilizar o seguinte comando Perl para gerar a cadeia de log-in codificada base64. Repare nas aspas:
Code language: Perl (perl)perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
Neste exemplo a saída é
AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk
Conecte-se ao seu servidor SMTP com openssl.exe
, e repetir os passos anteriormente mencionados com EHLO
e AUTH PLAIN
:
Code language: PowerShell (powershell)c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
Bónus: verificar StartTLS para servidores SMTP-, POP3- ou IMAP – Verificar certificados HTTPS TLS/SSL#
Para verificar se o seu servidor de correio (SMTP-, POP3-, ou IMAP) suporta StartTLS, usar o seguinte 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
Verificar certificado HTTPS TLS/SSL
Utilizar openssl
para verificar e verificar ligações HTTPS:
Code language: Bash (bash)openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
Substituir anfitrião com o seu cabeçalho de anfitrião ou nome de domínio, e 203.0.113.15 com o endereço IP do seu servidor web.
Protip: verifique a data de expiração do certificado SSL.
Este one-liner verifica a data de expiração do certificado SSL, a partir da linha de comando do 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! 🙂