OpenSSL für Windows 10 und 11

OpenSSL Installation für Windows 10 und Windows 11

OpenSSL war bisher nur Linux-Betriebssystemen vorbehalten oder musste unter Mac und Windows aufwendig aus dem Quellcode selbst kompiliert werden. Mit Win32/Win64 OpenSSL ist die Open-Source-Software Bibliothek auch auf 32-Bit und 64-Bit Windows-Betriebssystemen (x86/i386) lauffähig und kann auf Windows-Rechnern per Installer integriert werden.

OpenSSL ist weit verbreitet und wird zur Verschlüsslung in zahlreichen Anwendungsbereichen genutzt, sowie bei SSL/TLS-Verbindungen HTTPS, auch etwa bei Kryptographie in SSH-, OpenVPN- und DNSSEC.

Das Win32/Win64 OpenSSL-Installationsprojekt von Shining Light Productions (slproweb.com) befasst sich mit der einfachen Bereitstellung von OpenSSL für Microsoft Windows. Die Installation besteht aus dem herunterladen und entpacken der Binärdateien, womit das kompilieren von Source-Code nicht weiter erforderlich ist.

INSTALLATION

In diesem Tutorial werden zwei Methoden gezeigt, um OpenSSL unter Windows 10 und Windows 11 bereitzustellen. Die einfache methode gleich zu beginn, in dem der Windows-Paket-Manager aus der Eingabeaufforderung ausgeführt wird, mit den Tasten Windows-Logo+R und cmd im Feld Ausführen und Klick auf OK, oder mit Windows und Eingabe von cmd und Klick auf das Symbol „Eingabeaufforderung“.


Windows Start
und cmd eingeben

Eingabeaufforderung als Administrator

In der nun geöffneten Eingabeaufforderung das folgende Kommando ausführen, falls man mit dem angemeldeten Benutzer nicht Administrator berechtigt ist, kann „Als Administrator ausführen“ gewählt werden.

C:\> winget install openssl

Der Windows-Paket-Manager „winget“ ermöglicht das Installieren von Anwendungen und anderen Paketen mithilfe der Befehlszeile. Wenn winget zum ersten Mal gestartet wird, wird man aufgefordert, die Bedingungen der Quellvereinbarung zu bestätigen, hier die Y Taste drücken.

winget install openssl

Das OpenSSL Paket ist nun installiert. Die zweite Methode besteht darin, das Paket herunterzuladen und zu installieren.

Manuelle Win64 OpenSSL Installation

Die Tabelle (Screenshot) auf der Webseite von slproweb.com enthalten jeweils die Versionen für Win32 und Win64 OpenSSL als EXE und MSI-Installer.

Download Win32_Win64 OpenSSL Installer for Windows
Webseite: https://slproweb.com/products/Win32OpenSSL.html

Empfohlen ist hier die letzte Version mit den am häufigsten verwendeten Essentials von Win64 OpenSSL v3.0.7, zum Zeitpunkt bei der Erstellung dieses Beitrags, ist es Win64 OpenSSL v3.0.7 EXE Light, oben in der ersten Zeile.

Mit Doppelklick die Datei Win64OpenSSL_Light-3_0_7.exe ausführen, es erscheint der Setup-Assistent. Die Windows Kontensteuerung (UAC) mit Ja bestätigen, um die Installation fortzuführen.

User Account Control

Der Setup-Assistent entpackt und kopiert die OpenSSL Dateien.

Windows Setup openssl installing files

Die OpenSSL Umgebung aufsetzen

Nachdem die OpenSSL Dateien kopiert und installiert sind, wird nun der Suchpfad und die Umgebungsvariable dem Betriebssystem hinzugefügt, mit Windows + R und einfügen von SYSTEMPROPERTIESADVANCED und OK.

SYSTEMPROPERTIESADVANCED

Das Fenster Systemeigenschaften wird geöffnet.

Windows System Properties

Unten auf die Schaltfläche Umgebungsvariablen klicken.

Windows Environment Variables

Im unteren Bereich Systemvariablen mit der Maus die Zeile Path selektieren und auf die Schaltfläche Bearbeiten klicken.

Edit environment variable path

Im Fenster „Umgebungsvariablen bearbeiten“ mit Klick auf Neu den Pfad zum Ordner OpenSSL-Win64\bin unter Programme hinzufügen. Den Pfad in welchem die Datei openssl.exe ist, lässt sich mit dem Windows Explorer finden und in die Zwischenablage kopieren, auch gibt es die Möglichkeit mit der Schaltfläche Durchsuchen den Pfad zum Ordner bin auszuwählen und einzufügen. Die Aktion abschliessend mit OK bestätigen.

Jetzt mit Neu eine weitere Systemvariable hinzufügen.

edit new system variable openssl conf

Im Feld Name der Variable OPENSSL_CONF eintragen. Im unteren Feld den Pfad einfügen, zu diesem die Datei openssl.cnf liegt, hier ist es C:\Program Files\OpenSSL-Win64\bin\cnf\openssl.cnf

Die Installation ist nun abgeschlossen und OpenSSL kann genutzt werden. Als erstes ergibt sich die Gelegenheit die OpenSSL Version zu überprüfen.

C:\> openssl version -a
OpenSSL 3.0.7 1 Nov 2022 (Library: OpenSSL 3.0.7 1 Nov 2022)
built on: Tue Nov  1 16:04:12 2022 UTC
...
C:\> openssl version -d
OPENSSLDIR: "C:\Program Files\Common Files\SSL"

Das OpenSSL Toolkit ist eine vielseitig einsetzbare Utility mit vielen Optionen, unter Windows gibt es dabei die Möglichkeit von der Nutzung der man page nicht, wie dies unter Linux bekannt ist. Mit dem Befehl openssl help ist jedoch kontextbezogene Hilfe abrufbar, zum Beispiel mitopenssl help s_clientoderopenssl help x509undopenssl help requm nur wenige Beispiele zu nennen. Hilfe wird auch auf den Dokumentationsseiten angeboten, wo auch Manpages zu finden sind.

Nützliche OpenSSL-Beispiele

Einige der am häufigsten verwendeten OpenSSL-Befehlsbeispiele sind hier aufgeführt.

openssl x509 -noout -text -in ca-cert.pem

Anzeigen der Zertifikatsdatei „ca-cert.pem“ in Klartext.

openssl req -text -noout -verify -in x509-check.csr

Zeigt und überprüft den Inhalt von CSR „x509-check.csr“ im Klartext an.

openssl rsa -check -in rootCA.key

Überprüfen der Schlüsselkonsistenz von rootCA.key.

openssl x509 -noout -modulus -in ca-cert.pem | openssl md5

Überprüft die MD5-Prüfsumme des Zertifikats ca-cert.pem.

openssl crl2pkcs7 -nocrl -certfile servercert.pem -out c:\temp\servercert.p7b

Zertifikat konvertieren von pem in das p7b-Format in den Temp Ordner.

openssl pkcs12 -export -in rootCA.pem -inkey rootCA.key -out c:\temp\rootCA.p12 -name "PKCS12 certificate"

Zertifikat rootCA.pem in PKCS12-Format konvertieren als rootCA.p12.

openssl req -new -newkey rsa:2048 -sha256 -days 365 -nodes -x509 -keyout server.key -out server.crt

SSL-Zertifikat in einer einzigen Zeile generieren, der Schlüssel mit SHA256 und RSA 2048-Verschlüsselung, es ist 1 Jahr lang gültig.

openssl s_client -connect imap.gmail.com:993

Verbindung prüfen zu imap.gmail.com Port 993, um nützlichere Ergebnisse wie etwa mit Telnet zu erhalten.

openssl s_client -crlf -connect smtp.gmail.com:587 -starttls smtp

Überprüfen der Verbindung zu smtp.gmail.com Port 587 über das starttls-Protokoll, nützlich um eine Firewall Regel zu testen.

openssl s_client -verify_quiet -brief www.ietf.org:443

Die Protokollversion und Ciphersuite analysieren, das Peer-Zertifikat und den verwendeten Hash anzeigen.

openssl rand -base64 20

Ein zufälliges Passwort generieren mit OpenSSL, etwa als Passphrase um private Schlüssel zu schützen.

Dies waren nur einige Beispiele, denn OpenSSL ist ein vielseitiges Toolkit das zahlreiche Anwendungsmöglichkeiten bietet.

Fazit

Die OpenSSL Open-Source Bibliothek für die Kryptographie ist wichtiger denn je und nicht mehr wegzudenken. Es werden Verbindungen verschlüsselt und geschützt, warum also soll das OpenSSL Toolkit nicht auch unter Windows genutzt werden können. Es können digitale X. 509-Zertifikate erstellt und überprüft werden, Algorithmen für die Datenverschlüsselung wie Chiper Suite, der digitale Fingerabdruck, MD5 und SHA Hash Werte analysiert werden, was bisher nur Linux vorbehalten war.

Quellen Links:
slproweb.com Win32/Win64 OpenSSL Installation Project for Windows
openssl.org Cryptography and SSL/TLS Toolkit

fetchmail e-mails abrufen unter Debian 11

E-Mails abrufen und weiterleiten mit fetchmail auf Debian mit Postfix

Das fetchmail Dienstprogramm kann im Daemon-Modus von einem oder mehreren Systemen in Intervalle wiederholt E-Mails abrufen, es werden E-Mails von Servern gesammelt die alle gängigen E-Mail-Abrufdienste unterstützen, wie POP3 und IMAP Protokolle.

In diesem Tutorial wird gezeigt wie fetchmail auf Debian 11 (bullseye) mit Postfix eingesetzt werden kann. Die E-Mails von externen Mail-Dienstanbieter werden abgerufen und an Empfänger zum Postfach Server weitergeleitet dieser vom Smarthost die E-Mails empfängt. Dabei sind bei den Mailkonten keine Weiterleitungen erforderlich, gleichzeitig können die E-Mails durch den Smarthost auf Viren und SPAM untersucht werden, bevor diese dem Benutzer Postfach zugestellt werden.

fetchmail Installation auf Debian

Das fetchmail-Dienstprogramm kann aus dem Debian Standard Repository bereitgestellt werden.

$ sudo apt install -y fetchmail

Den Daemon Modus aktivieren in/etc/default/fetchmail

# This file will be used to declare some vars for fetchmail
#
# Uncomment the following if you don't want localized log messages
# export LC_ALL=C

# If you want to specify any additional OPTION to the start
# scripts specify them here
# OPTIONS=...

# Declare here if we want to start fetchmail. 'yes' or 'no'
START_DAEMON=yes

Bei START_DAEMON von no auf yes ändern.

Die globale Recourcen-Konfiguration fetchmailrc für den Betrieb als Daemon erstellen in/etc/fetchmailrc

set daemon 900
set no syslog
set logfile /var/log/fetchmail
set postmaster "postmaster"
set no bouncemail
set no spambounce
set properties ""

poll pop.gmx.net with proto POP3
user 'john@gmx.net' there with password 'M1HXGLKQJ9OZPCA6V34R' is john@foo.org here options ssl sslcommonname mail.gmx.net smtphost localhost

Für jeden Mailserver von diesem E-Mails abgerufen werden, wird eine poll Zeile erstellt. Es wird hier alle 15 Minuten das externe Postfach von john@gmx.net beim POP3 Server mail.gmx.net abgerufen und mit smtphost über localhost zum Postfach Server dem Benutzer john@foo.org zugestellt. Damit die Protokollierung nicht in /var/log/mail.log gelangt, werden anstelle diese in /var/log/fetchmail geloggt.

Der Common Name (CN) aus dem Zertifikat der mit sslcommonname übergeben werden muss, kann mit einem Webbrowser ermittelt werden, oder mit folgenden Kommando in der Linux Shell.

$ openssl s_client -connect pop.gmail.com:995 | grep "CN="
# with Windows OS
C:\> openssl s_client pop.gmail.com:995 | findstr "CN ="

  Unter Windows 10 /11 muss OpenSSL erst bereitgestellt werden, die Binary sind bei slproweb.com verfügbar, oder man installiert das Paket mitwinget install openssl

Mit fetchmail e-mails abrufen

fetchmail bietet eine Reihe von syntaktischen Feinheiten, um das auslesen von fetchmailrc zu erleichtern. Während es möglich ist, Anmeldeinformationen für einen Server in einer Zeile anzugeben, werden häufige Konfigurationen über eine Reihe von verschiedenen Zeilen angegeben. fetchmail ist unempfindlich gegenüber Whitespace, außer wenn das Argument in Anführungs- und Schlusszeichen erfolgt.

Für die Poll-Anweisung gibt es mehrere Optionen (z.B. nofetchall (default), fetchall, keep oder nokeep ).
Die Bedeutungen sind wie folgt:

nofetchall: Nur neue Nachrichten abrufen (Standard). Wenn nichts anderes angegeben ist (z.B. fetchallkeep ), bedeutet dies nofetchall.
fetchall: Holt alle Nachrichten, ob gesehen oder nicht.
keep: Löscht keine Nachrichten auf dem Server.
nokeep: Löscht die gelesenen Nachrichten vom Server.

Besitzer fetchmail für die Datei fetchmailrc setzen.

$ chown fetchmail /etc/fetchmailrc
$ chmod 0600 /etc/fetchmailrc

Der fetchmail daemon wird neu gestartet.

$ systemctl restart fetchmail

Überprüfen lässt sich die fetchmail Konversation zum externen Server mit folgendem Befehl:

$ fetchmail -vv -N --ssl -p pop3 -P 995 -ujohn@gmx.net mail.gmx.net

Die Konfigurationsdatei fetchmailrc testen.

$ fetchmail -v -a -k -f /etc/fetchmailrc

Den fetchmail Prozess überprüfen.

$ ps -ef | grep -v grep | grep fetchmail

Die Ausgabe kann in etwa wie folgt aussehen:

fetchma+ 23566     1  0  2022 ?        00:01:42 fetchmail -vv -d 900 -a -f /etc/fetchmailrc -L /var/log/fetchmail

Die Protokollierung findet nun in der Datei fetchmail statt.

$ tail -f /var/log/fetchmail

In der Log-Datei fetchmail wird in etwa folgendes protokolliert.

fetchmail: awakened at Sat 21 Jan 2023 08:55:45 AM CET
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll started
fetchmail: Trying to connect to 212.227.17.169/995...connected.
fetchmail: Certificate chain, from root to peer, starting at depth 2:
fetchmail: Issuer Organization: T-Systems Enterprise Services GmbH
fetchmail: Issuer CommonName: T-TeleSec GlobalRoot Class 3
fetchmail: Server certificate:
fetchmail: Subject CommonName: mail.gmx.net
fetchmail: pop.gmx.net key fingerprint: 36:6D:93:38:DE:58:A2:8B:6D:61:F7:76:1F:56:70:BF
fetchmail: SSL/TLS: using protocol TLSv1.2, cipher ECDHE-RSA-AES256-GCM-SHA384, 256/256 secret/processed bits
fetchmail: POP3< +OK POP server ready H migmx106 1MMFyQ-1p2A592gZq-00YABU
fetchmail: POP3> CAPA
fetchmail: POP3< +OK Capability list follows
fetchmail: POP3< TOP
fetchmail: POP3< UIDL
fetchmail: POP3< USER
fetchmail: POP3< SASL PLAIN
fetchmail: POP3< IMPLEMENTATION trinity
fetchmail: POP3< .
fetchmail: POP3> USER john@gmx.net
fetchmail: POP3< +OK password required for user "john@gmx.net"
fetchmail: POP3> PASS *
fetchmail: POP3< +OK mailbox "john@gmx.net" has 0 messages (0 octets) H migmx106
fetchmail: selecting or re-polling default folder
fetchmail: POP3> STAT
fetchmail: POP3< +OK 0 0
fetchmail: No mail for john@gmx.net at pop.gmx.net
fetchmail: POP3> QUIT
fetchmail: POP3< +OK POP server signing off
fetchmail: 6.3.24 querying pop.gmx.net (protocol POP3) at Sat 21 Jan 2023 08:55:45 AM CET: poll completed
fetchmail: New UID list from pop.gmx.net: <empty>
fetchmail: not swapping UID lists, no UIDs seen this query
fetchmail: Query status=1 (NOMAIL)
fetchmail: sleeping at Sat 21 Jan 2023 08:55:45 AM CET for 900 seconds

  Das Beispiel zeigt eine Login Sequenz in einer etwas verkürzter form.

Die fetchmail man page gibt zahlreiche nützliche Informationen aus.

$ man fetchmail