PowerShell SMTP Client Test TLS Protokoll Test
getestet unter: Windows 7,10 Windows Server 2012 R2 ab PowerShell V3, .NET 4.5.x
Da ich bisher kein Tool unter Windows gefunden habe, welches die Auswahl von TLS-Protokollen im SMTP-Kontext ermöglicht, habe ich nun auf Basis von PowerShell und der nativen .NET Mail-Klasse ein kleines Skript gebaut. Es handelt sich hierbei nur um StartTLS-basierte TLS-Verbindungen, d. h. die Verbindung wird erst nachträglich verschlüsselt, zu Beginn ist die Verbindung unverschlüsselt.
Zum Download
Was deckt das Skript ab
- Die folgenden Protokolle werden gegen SMTP-Test getestet:
- Keine Verschlüsselung (None)
- TLS 1.3 (Tls13)
- TLS 1.2 (Tls12)
- TLS 1.1 (Tls11)
- TLS 1.0 (Tls)
- SSL 3.0 (Ssl3)
- Der Zielserver kann mittels IP oder FQDN angesprochen werden
- Der SMTP-Port kann gewählt werden
- Die Absenderadresse und die Zieladresse können angegeben werden
- Anmeldedaten für die SMTP-Sitzung werden unterstützt
- Das Rückgabeobjekt ist ein PSCustomObject, welches problemlos weiterverarbeitet werden kann (z. B. Export via CSV etc.)
- Betreff der Testnachricht kann angepasst werden
- Selbstsignierte Zertifikate am Server werden unterstützt
Voraussetzungen
- PowerShell ab Version 3.0
- .NET Framework 4.5.x
Funktionsweise des Scripts
- Zunächst werden die zu testenden TLS-Protokolle im Array aufgelistet. Für den jeweiligen Test wird nachher immer ein bestimmtes TLS-Protokoll aktiviert und dem "System.Net.ServicePointManager" als SecurityProtocol (System.Net.SecurityProtocolType) zugewiesen.
- Die einzelnen Array-Elemente werden nun in einer Foreach-Schleife abgearbeitet.
- Der letzte Teil des Strings des Arrayelements wird mittels einer Regex-Expression extrahiert und in der Folge verwendet, um anzuzeigen, welches Protokoll gerade getestet wird.
- Mittels der Klasse "Net.Mail.SmtpClient" wird ein Objekt erstellt.
- Die als Scriptparameter übergebenen Werte werden nun als Attribute entsprechend in dem Objekt gepflegt
- Sofern der Parameter "MailServerUsername" gesetzt wurde, wird dieses entweder gemeinsam mit dem Passwort über den Parameter "MailServerPassword" als Credentials hinterlegt oder das Script fordert zur Eingabe des Passworts auf.
- Wenn das aktuelle Array-Element "None" entspricht, wird der Verschlüsselungsanteil des Scripts übersprungen, andernfalls wird TLS für das Mailobjekt aktiviert.
- Sofern der Parameter "MailIgnoreTLSValidation" auf true gesetzt wurde, wird der ServicePointManager angewiesen invalide Zertifikate zu akzeptieren.
- Das Mailobjekt wird abschließend veranlasst den Sendevorgang durchzuführen.
- Die Ergebnisse werden zunächst in einer Hashtable und anschließend als PowerShell-Objekt in ein Array geschrieben. Dies ermöglicht eine einfache Weiterverarbeitung und Filterung.
Anwendung des Scripts Bei dem nachfolgenden Beispiel versucht das Script die TLS-Tests mit dem Server "mail01.domain.local" unter Verwendung des TCP-Ports 25. Der Absender ist "yourname@yourdomain.com" und der Empfänger "anothername@yourdomain.com". Eine Authentifizierung wird mit dem Benutzernamen "yourname@yourdomain.com" durchgeführt:
C:\Skripte>.\Check-SMTPTLSProtocols.ps1 -MailServer smtp.office365.com -MailSender yourname@yourdomain.com -MailRecipient anothername@foreigndomain.com -MailServerUsername yourname@yourdomain.com
Das Ergebnis sieht dann beispielsweise so aus:
Um die zurückgegebenen Daten in eine CSV-Datei zu schreiben, kann man diese zum Cmdlet Export-Csv pipen:
C:\Skripte>.\Check-SMTPTLSProtocols.ps1 -MailServer smtp.office365.com -MailSender yourname@yourdomain.com -MailRecipient anothername@foreigndomain.com -MailServerUsername yourname@yourdomain.com | Export-Csv TLSTest.csv -Delimiter ";" -Encoding Default -NoTypeInformation
aktuelle Downloads
|