Hoe SMTP Authenticatie en StartTLS te testen

Hoe SMTP Authenticatie en StartTLS te testen via de command line?

Bij het onderzoeken van SMTP authenticatie problemen, in het bijzonder over TLS versleutelde SMTP verbindingen, is het altijd handig als je de SMTP authenticatie en StartTLS verbinding kunt testen. Bij voorkeur vanaf uw commandoregel. Deze post laat zien hoe je SMTP servers kunt testen, SMTP authenticatie kunt verifiëren en StartTLS versleutelde verbindingen kunt starten vanaf de Linux en Windows command line.

SMTP Authentication#

SMTP Authentication is het mechanisme waarmee de clients van een ISP zich identificeren bij de mail server via welke ze van plan zijn e-mail te verzenden.

SMTP-authenticatie, vaak afgekort tot SMTP AUTH, is een uitbreiding van het Simple Mail Transfer Protocol waarbij een SMTP-client zich kan aanmelden met een authenticatiemechanisme dat door de SMTP-server wordt ondersteund.

Wat is Transport Layer Security (TLS)?

Transport Layer Security (TLS) en zijn voorganger, Secure Sockets Layer (SSL), zijn cryptografische protocollen die zijn ontworpen om communicatie over het internet te beveiligen. Zij maken gebruik van X.509 certificaten en dus asymmetrische cryptografie om de tegenpartij te verzekeren met wie wordt gecommuniceerd, en om een symmetrische sleutel uit te wisselen.

Test TLS-verbindingen en SMTP AUTH vanaf de Linux- en Windows-opdrachtregel#

De meeste problemen met SMTP en het verzenden van e-mail komen voort uit het feit dat ofwel de combinatie van gebruikersnaam en wachtwoord bij het inloggen onjuist is, ofwel de mailserver StartTLS niet ondersteunt, ofwel het gebruikte authenticatiemechanisme onjuist is.

Laten we ze allemaal aanpakken, testen en verifiëren.

Het kunnen verifiëren van (Start)TLS versleutelde verbindingen met OpenSSL, en SMTP AUTH opties, is ideaal voor wanneer u problemen heeft met e-mail formulieren die e-mail versturen met gebruikmaking van geauthenticeerde SMTP, over een TLS versleutelde verbinding (vanaf een website).

Om de SMTP authenticatie over TLS te controleren, heeft u de OpenSSL client nodig:

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

Maak SMTP AUTH inloggegevens met Perl#

Voordat u de SMTP AUTH PLAIN authenticatie over TLS kunt testen, moet u inloggegevens aanmaken. De inloggegevens zijn uw gebruikersnaam (e-mail adres) en wachtwoord, en een speciaal teken \0. Normaal gesproken is dit een e-mail adres en het bijbehorende wachtwoord.

Om de combinatie te maken – die base64 gecodeerd moet zijn – kunt u Perl gebruiken:

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

U moet niet vergeten om het teken @ te escapen met een schuine streep (\), anders wordt het geïnterpreteerd als een array. De base64 gecodeerde string zal er ongeveer zo uitzien:

AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Bash (bash)

SMTP AUTH log-in informatie met Bash#

Je hebt niet per se Perl nodig om een log-in hash te genereren, je kunt ook Bash gebruiken:

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

Verbind met een SMTP server met openssl in bash#

In bash kun je nu het openssl commando gebruiken, zoals hieronder uitgelegd, om een TLS versleutelde verbinding met je SMTP server op te zetten:

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

Dit geeft een hoop uitgebreide uitvoer, geen zorgen 🙂

Als de verbinding tot stand is gebracht, zult u een SMTP 250 code zien:

250 DSN

Dit betekent dat u uw SMTP transactie kunt starten. Gebruik EHLO om de SMTP-server de ondersteunde werkwoorden te laten uitprinten:

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

Hier ziet u AUTH PLAIN LOGIN als een aanmeldingsmethode. De SMTP mailserver ondersteunt het door u gewenste authenticatiemechanisme. Uw volledige gebruikersnaam en wachtwoord login informatie is verpakt in de base64 gecodeerde string. Gebruik dat om te authenticeren:

AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Nginx (nginx)

Als alles goed gaat, rapporteert de SMTP server een succesvolle authenticatie:

235 2.7.0 Authentication successful
Code language: YAML (yaml)

Omdat de gebruikersnaam en wachtwoord combinatie base64 gecodeerd is, en in platte tekst wordt verstuurd, heb je StartTLS/TLS encryptie nodig om je SMTP verbinding te beveiligen.

Protip: Hier leest u hoe u geauthenticeerde SMTP e-mail over TLS kunt verzenden vanuit WordPress! En hoe je geauthenticeerde SMTP over een TLS versleutelde verbinding kunt versturen, in PHP, ASP en ASP.NET. Netjes!

Hoe OpenSSL en Perl te installeren op Windows#

Om al het bovenstaande te bereiken op Windows Server of Windows 8.1 of 10, moet je de OpenSSL client en Perl (ik gebruik Strawberry Perl) downloaden en installeren:

  • Win32 OpenSSL Installatie Project (kies de juiste smaak)
  • Strawberry Perl Releases (ik gebruik de ZIP editie die geen installatie vereist)
  • Installeer OpenSSL naar c:\OpenSSL-Win32 of c:\OpenSSL-Win64, afhankelijk van de bitness
  • Untzip strawberry-perl-5.18.2.2-32bit.zip of strawberry-perl-5.18.2.2-64bit.zip en kopieer de map naar c:\Perl bijvoorbeeld

Configureer uw Windows OpenSSL-omgeving#

Nu configureert u uw OpenSSL-omgeving in Windows om openssl.cnf waarschuwingen te voorkomen:

  1. op de cmd.exe-opdrachtregel typt u set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg. Dit voorkomt een foutmelding: WARNING: can't open config file: /usr/local/ssl/openssl.cnf

Maak SMTP AUTH-inloggegevens aan en maak verbinding met een SMTP-server met Perl/openssl in Windows#

Gebruik het volgende Perl-commando om de base64-gecodeerde inlogstring te genereren. Let op de aanhalingstekens:

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

In dit voorbeeld is de uitvoer

AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk

Maak verbinding met uw SMTP server met openssl.exe, en herhaal de eerder genoemde stappen met EHLO en AUTH PLAIN:

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

Bonus: Controleer StartTLS voor SMTP-, POP3- of IMAP-servers – Controleer HTTPS TLS/SSL-certificaten#

Om te controleren of uw (SMTP-, POP3-, of IMAP) mailserver StartTLS ondersteunt, gebruikt u het volgende OpenSSL-commando:

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)

Controle HTTPS TLS/SSL-certificaat
Gebruik openssl om HTTPS-verbindingen te controleren en te verifiëren:

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

Vervang host in uw host header of domeinnaam, en 203.0.113.15 met het IP adres van uw web server.

Protip: controleer de vervaldatum van het SSL certificaat.
Deze one-liner controleert de vervaldatum van het SSL certificaat, vanaf de Linux command line met 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! 🙂

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *