Wie testet man SMTP-Authentifizierung und StartTLS

Wie testet man SMTP-Authentifizierung und StartTLS über die Kommandozeile?

Bei der Untersuchung von SMTP-Authentifizierungsproblemen, insbesondere bei TLS-verschlüsselten SMTP-Verbindungen, ist es immer praktisch, wenn Sie die SMTP-Authentifizierung und die StartTLS-Verbindung testen können. Vorzugsweise von der Kommandozeile aus. Dieser Beitrag zeigt Ihnen, wie Sie SMTP-Server testen, die SMTP-Authentifizierung und StartTLS-verschlüsselte Verbindungen von der Linux- und Windows-Kommandozeile aus verifizieren können.

SMTP-Authentifizierung#

SMTP-Authentifizierung ist der Mechanismus, mit dem sich die Clients eines ISP gegenüber dem Mailserver identifizieren, über den sie E-Mails versenden wollen.

SMTP-Authentifizierung, oft mit SMTP AUTH abgekürzt, ist eine Erweiterung des Simple Mail Transfer Protocol, bei der sich ein SMTP-Client mit einem Authentifizierungsmechanismus anmelden kann, der aus den vom SMTP-Server unterstützten Mechanismen ausgewählt wird.

Was ist Transport Layer Security (TLS)?

Transport Layer Security (TLS) und sein Vorgänger, Secure Sockets Layer (SSL), sind kryptografische Protokolle, die für die Sicherheit der Kommunikation über das Internet sorgen sollen. Sie verwenden X.509 Zertifikate und damit asymmetrische Kryptographie, um sich zu vergewissern, mit wem sie kommunizieren, und um einen symmetrischen Schlüssel auszutauschen.

Testen Sie TLS-Verbindungen und SMTP-AUTH von der Linux- und Windows-Befehlszeile aus#

Die meisten Probleme beim SMTP- und Mail-Versand rühren daher, dass entweder die Kombination aus Benutzername und Passwort bei der Anmeldung falsch ist, der Mail-Server StartTLS nicht unterstützt oder der verwendete Authentifizierungsmechanismus falsch ist.

Lassen Sie uns alle ansprechen, testen und verifizieren.

Die Möglichkeit, (Start)TLS-verschlüsselte Verbindungen mit OpenSSL und SMTP AUTH-Optionen zu verifizieren, ist ideal, wenn Sie Probleme mit E-Mail-Formularen haben, die E-Mails mit authentifiziertem SMTP über eine TLS-verschlüsselte Verbindung (von einer Website) senden.

Um die SMTP-Authentifizierung über TLS zu überprüfen, benötigen Sie den OpenSSL-Client:

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

SMTP-AUTH-Anmeldeinformationen mit Perl# erstellen

Bevor Sie die SMTP-AUTH-PLAIN-Authentifizierung über TLS testen können, müssen Sie Anmeldeinformationen erstellen. Die Anmeldeinformationen bestehen aus dem Benutzernamen (E-Mail-Adresse) und dem Passwort sowie einem Sonderzeichen \0. Normalerweise ist dies eine E-Mail-Adresse und deren Passwort.

Um die Kombination – die base64-kodiert sein muss – zu erzeugen, können Sie Perl verwenden:

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

Sie dürfen nicht vergessen, das Zeichen @ mit einem Schrägstrich zu entschlüsseln (\), sonst wird es als Array interpretiert. Die base64-kodierte Zeichenkette sieht dann etwa so aus:

AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Bash (bash)

SMTP AUTH-Anmeldeinformationen mit Bash#

Sie brauchen nicht unbedingt Perl, um einen Anmelde-Hash zu erzeugen, Sie können auch Bash verwenden:

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

Verbindung zu einem SMTP-Server mit openssl in der Bash#

In der Bash können Sie nun mit dem openssl-Befehl, wie im Folgenden erklärt, eine TLS-verschlüsselte Verbindung mit Ihrem SMTP-Server aufbauen:

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

Das gibt eine Menge ausführlicher Ausgaben, keine Sorge 🙂

Wenn die Verbindung hergestellt ist, werden Sie einen SMTP 250 Code bemerken:

250 DSN

Das bedeutet, dass Sie Ihre SMTP Transaktion starten können. Verwenden Sie EHLO, um den SMTP-Server die unterstützten Verben ausgeben zu lassen:

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

Hier sehen Sie AUTH PLAIN LOGIN als Anmeldemethode. Der SMTP-Mailserver unterstützt den von Ihnen gewünschten Authentifizierungsmechanismus. Ihre vollständigen Anmeldeinformationen (Benutzername und Kennwort) sind in der base64-kodierten Zeichenfolge verpackt. Verwenden Sie diese zur Authentifizierung:

AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Code language: Nginx (nginx)

Wenn alles gut geht, meldet der SMTP-Server eine erfolgreiche Authentifizierung:

235 2.7.0 Authentication successful
Code language: YAML (yaml)

Da die Kombination aus Benutzername und Passwort base64-kodiert ist und im Klartext gesendet wird, benötigen Sie eine StartTLS/TLS-Verschlüsselung, um Ihre SMTP-Verbindung zu sichern.

Tipp: Hier erfahren Sie, wie Sie authentifizierte SMTP-E-Mails über TLS von WordPress aus versenden können! Und wie Sie authentifiziertes SMTP über eine TLS-verschlüsselte Verbindung senden, in PHP, ASP und ASP.NET. Prima! 🙂

Wie man OpenSSL und Perl unter Windows installiert#

Um all das oben genannte unter Windows Server oder Windows 8.1 oder 10 zu installieren, müssen Sie den OpenSSL-Client und Perl (ich verwende Strawberry Perl) herunterladen und installieren:

  • Win32 OpenSSL Installation Project (wählen Sie den richtigen Flavor)
  • Strawberry Perl Releases (ich verwende die ZIP-Edition, die keine Installation erfordert)
  • Installieren Sie OpenSSL auf c:\OpenSSL-Win32 oder c:\OpenSSL-Win64, je nach Bitrate
  • Entpacken Sie strawberry-perl-5.18.2.2-32bit.zip oder strawberry-perl-5.18.2.2-64bit.zip und kopieren Sie den Ordner nach c:\Perl zum Beispiel

Konfigurieren Sie Ihre Windows-OpenSSL-Umgebung#

Nun konfigurieren Sie Ihre OpenSSL-Umgebung in Windows, um openssl.cnfWarnungen zu vermeiden:

  1. auf der cmd.exe-Befehlszeile geben Sie set OPENSSL_CONF=c:\OpenSSL-Win64\bin\openssl.cfg ein. Dadurch wird eine Fehlermeldung verhindert: WARNING: can't open config file: /usr/local/ssl/openssl.cnf

SMTP-AUTH-Anmeldeinformationen erstellen und mit Perl/openssl unter Windows# eine Verbindung zu einem SMTP-Server herstellen

Mit dem folgenden Perl-Befehl können Sie den base64-kodierten Anmeldestring erzeugen. Beachten Sie die Anführungszeichen:

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

In diesem Beispiel lautet die Ausgabe

AHVzZXJuYW1lQGV4YW1wbGUuY29tAHBhc3N3b3Jk

Verbinden Sie sich mit Ihrem SMTP-Server mit openssl.exe, und wiederholen Sie die zuvor genannten Schritte mit EHLO und AUTH PLAIN:

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

Bonus: StartTLS für SMTP-, POP3- oder IMAP-Server verifizieren – HTTPS-TLS/SSL-Zertifikate prüfen#

Um zu überprüfen, ob Ihr (SMTP-, POP3- oder IMAP-)Mailserver StartTLS unterstützt, verwenden Sie den folgenden OpenSSL-Befehl:

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)

HTTPS-TLS/SSL-Zertifikat prüfen
Um HTTPS-Verbindungen zu prüfen und zu verifizieren, verwenden Sie openssl:

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

Ersetzen Sie host durch Ihren Host-Header oder Domainnamen und 203.0.113.15 mit der IP-Adresse Ihres Webservers.

Tipp: SSL-Zertifikat-Ablaufdatum prüfen.
Dieser Einzeiler prüft das Ablaufdatum des SSL-Zertifikats, von der Linux-Befehlszeile aus mit 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! 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.