PowerShell SMTP Client StartTLS Tester

- 08.12.2018
von Thomas Windscheif / Microlinc



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


  1. 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.
  2. Die einzelnen Array-Elemente werden nun in einer Foreach-Schleife abgearbeitet.
  3. 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.
  4. Mittels der Klasse "Net.Mail.SmtpClient" wird ein Objekt erstellt.
  5. Die als Scriptparameter übergebenen Werte werden nun als Attribute entsprechend in dem Objekt gepflegt
  6. 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.
  7. Wenn das aktuelle Array-Element "None" entspricht, wird der Verschlüsselungsanteil des Scripts übersprungen, andernfalls wird TLS für das Mailobjekt aktiviert.
  8. Sofern der Parameter "MailIgnoreTLSValidation" auf true gesetzt wurde, wird der ServicePointManager angewiesen invalide Zertifikate zu akzeptieren.
  9. Das Mailobjekt wird abschließend veranlasst den Sendevorgang durchzuführen.
  10. 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

Download
-> Check-SMTPTLSProtocolsV1.1.zip (Version 1.1) ~ 3 KB
-> Check-SMTPTLSProtocols.zip (Version 1.0) ~ 2,8 KB
MICROL!NC - URL zum Artikel: http://microlinc.homeip.net/index.php?lev1=21&lev2=2&id=409 - Ausdruck vom 20.04.2024