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:
Code language: Bash (bash)sudo apt-get install opensslsudo yum install openssl
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:
Code language: Perl (perl)perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
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:
Code language: Bash (bash)AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
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:
Code language: Bash (bash)echo -ne '\[email protected]\0password' | base64
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:
Code language: Bash (bash)openssl s_client -connect smtp.example.com:25 -starttls smtp
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:
Code language: YAML (yaml)EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
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:
Code language: Nginx (nginx)AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Als alles goed gaat, rapporteert de SMTP server een succesvolle authenticatie:
Code language: YAML (yaml)235 2.7.0 Authentication successful
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
ofc:\OpenSSL-Win64
, afhankelijk van de bitness - Untzip
strawberry-perl-5.18.2.2-32bit.zip
ofstrawberry-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:
- 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:
Code language: Perl (perl)perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
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
:
Code language: PowerShell (powershell)c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
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:
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
Controle HTTPS TLS/SSL-certificaat
Gebruik openssl
om HTTPS-verbindingen te controleren en te verifiëren:
Code language: Bash (bash)openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
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
:
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! 🙂