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:
Code language: Bash (bash)sudo apt-get install opensslsudo yum install openssl
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:
Code language: Perl (perl)perl -MMIME::Base64 -e 'print encode_base64("\000username\@example.com\000password")'
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:
Code language: Bash (bash)AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
SMTP AUTH-Anmeldeinformationen mit Bash#
Sie brauchen nicht unbedingt Perl, um einen Anmelde-Hash zu erzeugen, Sie können auch Bash verwenden:
Code language: Bash (bash)echo -ne '\[email protected]\0password' | base64
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:
Code language: Bash (bash)openssl s_client -connect smtp.example.com:25 -starttls smtp
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:
Code language: YAML (yaml)EHLO there250-smtp.example.com250-PIPELINING250-SIZE 52428800250-ETRN250-AUTH PLAIN LOGIN250-ENHANCEDSTATUSCODES250-8BITMIME250 DSN
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:
Code language: Nginx (nginx)AUTH PLAIN AHVzZXJuYW1lQGV4YW1wbGUuY29tAG15X3Bhc3N3b3Jk
Wenn alles gut geht, meldet der SMTP-Server eine erfolgreiche Authentifizierung:
Code language: YAML (yaml)235 2.7.0 Authentication successful
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
oderc:\OpenSSL-Win64
, je nach Bitrate - Entpacken Sie
strawberry-perl-5.18.2.2-32bit.zip
oderstrawberry-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.cnf
Warnungen zu vermeiden:
- 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:
Code language: Perl (perl)perl.exe -MMIME::Base64 -e "print encode_base64(\"\000username\@example.com\000password\")
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
:
Code language: PowerShell (powershell)c:\OpenSSL-Win64\bin>openssl.exe s_client -connect smtp.example.com:25 -starttls smtp
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:
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
HTTPS-TLS/SSL-Zertifikat prüfen
Um HTTPS-Verbindungen zu prüfen und zu verifizieren, verwenden Sie openssl
:
Code language: Bash (bash)openssl s_client -tls1_2 -servername host -connect 203.0.113.15:443
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
:
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! 🙂