Como testar a autenticação SMTP e StartTLS

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:

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

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:

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

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:

AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Bash (bash)

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:

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

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:

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

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:

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

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:

AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Nginx (nginx)

Se tudo correr bem, o servidor SMTP reporta uma autenticação bem sucedida:

235 2.7.0 Authentication successful
Code language: YAML (yaml)

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 ou c:\OpenSSL-Win64, dependendo do bitness
  • Unzip strawberry-perl-5.18.2.2-32bit.zip ou strawberry-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:

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

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

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:

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

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:

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)

Verificar certificado HTTPS TLS/SSL
Utilizar openssl para verificar e verificar ligações HTTPS:

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

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:

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! 🙂

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *