Schlagwort-Archive: OpenSSL Verschlüsselung

OpenSSL umfasst Implementierungen der Netzwerkprotokolle und verschiedener Verschlüsselungen sowie das Programm openssl für die Kommandozeile zum Beantragen,

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

SSL/TLS Verbindung Testen mit OpenSSL

HTTPS und IMAPS-Verbindung Testen und Analysieren

Verbindung Testen mit OpenSSL

OpenSSL kann vielseitig eingesetzt werden, so können nicht nur Schlüssel und Zertifikate für SSL/TLS Verschlüsselte Verbindungen generiert werden, auch sind deren Analysen und Tests möglich.

Dieser Beitrag zeigt die Anwendung von OpenSSL zur überprüfung und Analyse, beim Zugriff mit HTTPS auf Webserver über TCP Port 443, und STARTTLS über TCP 587, oder IMAPS TCP 993 zu Mailserver, dazu OpenSSL auf dem Computer benötigt wird.

Bei SSLLabs können SSL/TLS Server Tests durchgeführt werden, es wird der Verbindungsaufbau mit vielen verschiedenen Browsern durchgeführt und angezeigt, und welche Verschlüsselung erreicht wurde. So wird in der Auswertung ersichtlich, welche Verschlüsselungsverfahren und Schlüsselaustauschverfahren eingesetzt wurden.

HTTPS-Verbindung Testen mit OpenSSL

Sollen nur einzelne und individuelle Tests durchgeführt werden, zeigen dies die folgenden Beispiele. Es wird eine verschlüsselte Verbindung zu unblog.ch aufgebaut und anschließend die Webseite abgerufen.

$ openssl s_client -connect unblog.ch:443 -showcerts

In einer Situation bei dieser anstelle des Standard Port 443 für HTTPS ein alternativer Port genutzt wird, beispielsweise 4443, ist die Anwendung dieselbe, mit :4443 wird die Portnummer angegeben.

Möchte man das Public Zertifikat einer Webseite im RAW Text abrufen, kann durch folgende Kommandozeile das Zertifikat ausgegeben werden.

$ openssl s_client -connect think.unblog.ch:443 -showcerts | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'

Dieser Befehl wird in einem Linux Terminal, in macOS Terminal, in Git Bash, oder in einer WSL Session ausgeführt, die Ausgabe zwischen:
von —–BEGIN CERTIFICATE—–
bis —–END CERTIFICATE—–

-----BEGIN CERTIFICATE-----
MIIFajCCBFKgAwIBAgISAwYFPWKaEox8MgKHV5yqROeWMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0yMDA3MTcwMzAyMTZaFw0y
...
-----END CERTIFICATE-----

Mit Copy Paste in Notepad im PEM/CER Format (.cer) speichern.

Mit doppelklick auf das so gespeicherte öffentliche Zertifikat, öffnet sich dieses und zeigt sich unter Windows wie folgt.

Verbindung Testen mit OpenSSL

SMTPS STARTTLS Testen mit OpenSSL

Mit OpenSSL kann ermittelt werden, ob ein Mailserver (MTA) Verschlüsselte STARTTLS Verbindungen anbietet, mit folgender Kommandozeile.

$ openssl s_client -connect smtp-gw-246.server.com:587 -starttls smtp

Die Abfrage zeigt uns das öffentliche Zertifikat an, danach die Verschlüsselungsstärke, den Algorithmus (SHA256), die TLS Version (TLSv1.2), und Cipher (ECDHE-RSA-AES256-GCM-SHA384) und weitere Status Informationen.

subject=CN = smtp-gw-246.server.com

issuer=C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3

---
No client certificate CA names sent
Peer signing digest: SHA256
Peer signature type: RSA
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3441 bytes and written 480 bytes
Verification: OK
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: E1528C64C3CC7A9B28C4E1C2EA33EA0BEF1BACB6602B066351A49C705E192EB5
    Session-ID-ctx:
    Master-Key: 573AB776B9954B51B7FE4908171752874EFCC3DE5F35ECC42AA5F04E48B736290DECC948DE252AD61188B5A94A8BAE9A
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 7200 (seconds)
    TLS session ticket:
    0000 - 0b 99 b3 3a 91 90 66 a8-86 8d 0e 41 8a 90 61 9e   ...:..f....A..a.

IMAPS Verbindung Analysieren

IMAPs mit OpenSSL in der Kommandozeile Analysieren, mit dieser Kommandozeile lässt sich eine IMAPS (SSL/TLS) Verbindung über TCP Port 993 überprüfen.

$ openssl s_client -crlf -connect imap.gmail.com:993

Der Output dann wie hier mit CONNECT zu imap.gmail.com über den SSL Port 993 in etwa wie folgt in verkürzter Form.

CONNECTED(00000174)
depth=1 C = US, O = Google Trust Services, CN = GTS CA 1O1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = US, ST = California, L = Mountain View, O = Google LLC, CN = imap.gmail.com
verify return:1
---
Certificate chain
 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = imap.gmail.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIExjCCA66gAwIBAgIQN1SnMAZHJA0IAAAAAFMdITANBgkqhkiG9w0BAQsFADBC
MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVR29vZ2xlIFRydXN0IFNlcnZpY2VzMRMw
...
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 6074E0D401DD1E1DD5608CBC6F7CA4A2779A9AB4A9313732996D6C4DBD84BC68
    Session-ID-ctx:
    Resumption PSK:
...
read R BLOCK
* OK Gimap ready for requests from 12.34.56.78 t22mb67814ed
Q
DONE

Möchte man hier weitergehen, kann man versuchen sich am IMAP Server zu authentifizieren und nach neuen Mails abfragen.

A NO [ALERT] Application-specific password required: https://support.google.com/accounts/answer/185833 (Failure)

Gmail Antwortet nun mit A NO [ALERT], die Sicherheitseinstellungen zur Authentifizierung erfordert ein Application Passwort, da die Multi-Faktor-Authentifizierung (MFA) aktiviert ist.

* OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE LITERAL+ AUTH=PLAIN AUTH=LOGIN] Dovecot (Debian) ready.

Es folgt ein * OK mit der Ausgabe der verfügbaren Funktionalitäten (CAPABILITY), der IMAP Prompt wartet nun auf Eingaben.

Bei unserem Dovecot IMAP Server können wir uns anmelden.

A login imap-user passwort

Der Login besteht normalerweise aus der Email Adresse (imap-user) und einem Passwort.

Nach erfolgreichem Login erscheint die Ausgabe ähnlich wie diese.

A OK [CAPABILITY IMAP4rev1 SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH LIST-STATUS BINARY MOVE SNIPPET=FUZZY LITERAL+ NOTIFY SPECIAL-USE QUOTA] Logged in

Jetzt welchseln zum IMAP Posteingang (INBOX).

A select INBOX

Der Output von select INBOX in etwa wie folgt.

* FLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded)
* OK [PERMANENTFLAGS (\Answered \Flagged \Deleted \Seen \Draft $Forwarded \*)] Flags permitted.
* 3 EXISTS
* 0 RECENT
* OK [UNSEEN 3] First unseen.
* OK [UIDVALIDITY 1590737718] UIDs valid
* OK [UIDNEXT 12197] Predicted next UID
* OK [HIGHESTMODSEQ 39953] Highest
A OK [READ-WRITE] Select completed (0.001 + 0.000 secs).

Es sind wie zu sehen 3 ungelesene Mails in der INBOX, von der ersten Mail öffnen wir den Header (beginnt mit . Punkt).

. fetch 1 rfc822.header

Der Output von . fetch 1 rfc822.header (die ersten 6 Zeilen).

* 1 FETCH (RFC822.HEADER {3338}
Return-Path: 
Delivered-To: maxmuster@server.com
Received: from mail.server.com
        by mail.server.com with LMTP
        id sbn9BAzYQF9sJBACykIyCA
        (envelope-from )
..
. OK Fetch completed (0.001 + 0.000 secs).

Die erste ungelesene Mail öffnet sich mit . fetch 1 rfc822.text

. fetch 1 rfc822.text

Output von . fetch 1 dann in etwa wie hier bei meiner Mail.

* 1 FETCH (RFC822.TEXT {596297}

--Apple-Mail-3B8B8770-2CCE-4083-B331-2E1EDAF97C84
Content-Type: text/plain;
        charset=us-ascii
Content-Transfer-Encoding: 7bit

Guten Tag.

Anbei das PDF in der Anlage.

Freundliche Grüsse

--Apple-Mail-3B8C8770-2CCE-4083-B331-2E2EDBF97C94
Content-Type: application/pdf;
        name="Doc-21.08.2020-10-36.pdf";
        x-apple-part-url=CCDB9E0F-432F-2719-AE44-000259172822
Content-Disposition: inline;
        filename="Doc-21.08.2020-10-36.pdf"
Content-Transfer-Encoding: base64

JVBERi0jLjMKJbe+7aoKMSAwIG9iago8PA0vVHlwZSAvQ2F0YWxvZwozUGFnZXMgMiAwIFIKPj4K
ZW5kc2JqCjIgMCBvYmoKPDwKL1R5cGUgL1BhZ2VzCi9LaWRzIFsgNCFxIFIgXQovQ291bnQgMQo+
...
. OK Fetch completed (0.003 + 0.034 secs).

Es handelt sich hier also um eine Mail mit PDF Anlage, diese base64 kodiert ist.

Mit Eingabe Q wird die Verschlüsselte IMAP Session beendet.