Nützliche Anwendungen für openssl
Umfassende Anleitung zu OpenSSL: Von Grundlagen, Benchmarking, Zertifikatsverwaltung bis zur Verschlüsselung und S/MIME.
Dieser Artikel bietet eine umfassende Anleitung zur Verwendung von OpenSSL für verschiedene kryptografische Aufgaben. Ich habe ihn so strukturiert, um Schritt für Schritt durch verschiedene Anwendungsfälle zu führen, von grundlegenden Abfragen bis hin zu komplexeren Konfigurationen.
OpenSSL Version und Befehlsübersicht
Um die installierte OpenSSL-Version zu ermitteln, kann der Befehl openssl version
verwendet werden.
openssl version
Eine Übersicht über die verfügbaren Befehle erhält man mit openssl help
.
openssl help
Eine Liste der unterstützten Cipher-Suiten liefert der Befehl openssl ciphers
.
openssl ciphers
Benchmarking mit OpenSSL
Die Leistungsfähigkeit eines Systems kann mit OpenSSL getestet werden. Der Befehl openssl speed
misst die Performance verschiedener kryptografischer Algorithmen auf dem lokalen System.
openssl speed
Für das Benchmarking von Remote-Verbindungen kann openssl s_client
in Kombination mit openssl speed
verwendet werden, um die Geschwindigkeit von SSL/TLS-Verbindungen zu testen.
Zertifikatsverwaltung
Ein selbstsigniertes Zertifikat kann mit folgendem Befehl erstellt werden:
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
Für die Erstellung eines Certificate Signing Requests (CSR) für VeriSign kann folgender Befehl verwendet werden:
openssl req -new -newkey rsa:4096 -nodes -keyout key.pem -out req.pem
Zum Testen eines neuen Zertifikats können openssl s_server
und openssl s_client
verwendet werden. Um ein Remote-Zertifikat abzurufen, kann folgender Befehl genutzt werden:
openssl s_client -connect host:port -showcerts
Informationen aus einem Zertifikat können mit folgendem Befehl extrahiert werden:
openssl x509 -in cert.pem -text -noout
Für den Im- und Export von PKCS#12-Zertifikaten kann openssl pkcs12
verwendet werden.
Zertifikatsverifikation
Ein Zertifikat kann mit folgendem Befehl verifiziert werden:
openssl verify cert.pem
OpenSSL erkennt standardmäßig eine Reihe von Zertifizierungsstellen. Deren Liste kann mit dem Befehl openssl list-standard-trusts
(ab OpenSSL 3.0) eingesehen werden. Um OpenSSL dazu zu bringen, ein bestimmtes Zertifikat zu erkennen, kann der Pfad zum CA-Zertifikat mit der Option -CAfile
angegeben werden.
Kommandozeilen-Clients und -Server
OpenSSL kann auch als Kommandozeilen-Client und -Server verwendet werden. Um eine Verbindung zu einem sicheren SMTP-Server herzustellen, kann folgender Befehl verwendet werden:
openssl s_client -connect smtp.example.com:465 -starttls smtp
Für Verbindungen zu Webservern mit SNI kann folgender Befehl genutzt werden:
openssl s_client -connect www.example.com:443 -servername www.example.com
Ein einfacher SSL-Server kann mit folgendem Befehl aufgesetzt werden:
openssl s_server -cert cert.pem -key key.pem
Digest-Erstellung und -Verifikation
Ein MD5- oder SHA1-Digest einer Datei kann mit folgenden Befehlen erstellt werden:
openssl dgst -md5 file.txt
openssl dgst -sha1 file.txt
Um einen Digest zu signieren, kann folgender Befehl verwendet werden:
openssl dgst -sha256 -sign private.key -out signature.bin file.txt
Die Verifikation eines signierten Digests erfolgt mit folgendem Befehl:
openssl dgst -sha256 -verify public.key -signature signature.bin file.txt
Für die Erstellung eines Apache Digest-Passworteintrags kann folgender Befehl genutzt werden:
openssl dgst -md5 -hex user:realm:password
Verschlüsselung und Entschlüsselung
Für die Base64-Kodierung kann folgender Befehl verwendet werden:
openssl base64 -in file.txt -out encoded.txt
Eine Datei kann einfach mit folgendem Befehl verschlüsselt werden:
openssl enc -aes-256-cbc -salt -in file.txt -out encrypted.txt -pass pass:"mysecretpassword"
Schlüsselverwaltung
Ein RSA-Schlüssel kann mit folgendem Befehl erzeugt werden:
openssl genrsa -out key.pem 4096
Ein öffentlicher RSA-Schlüssel kann mit folgendem Befehl erstellt werden:
openssl rsa -in key.pem -pubout -out pubkey.pem
Für DSA-Schlüssel kann folgender Befehl genutzt werden:
openssl dsaparam -out dsaparam.pem 2048
und anschließend:
openssl gendsa -out key.pem dsaparam.pem
Elliptische Kurvenschlüssel können mit folgendem Befehl erzeugt werden:
openssl ecparam -name secp384r1 -genkey -noout -out key.pem
Um ein Passwort von einem Schlüssel zu entfernen, kann folgender Befehl verwendet werden:
openssl rsa -in key.pem -out newkey.pem
Passwort-Hashes
Ein crypt-style Hash kann mit folgendem Befehl erzeugt werden:
openssl passwd -crypt password
Für einen shadow-style Hash kann folgender Befehl genutzt werden:
openssl passwd -1 password
Primzahlen
Um zu prüfen, ob eine Zahl eine Primzahl ist, kann folgender Befehl verwendet werden:
openssl prime 1299709
Eine Reihe von Primzahlen kann mit folgendem Befehl generiert werden:
openssl prime -generate -bits 2048 -safe
Zufallsdaten
Zufallsdaten können mit folgendem Befehl erzeugt werden, um starke kryptografische Schlüssel und Initialisierungsvektoren zu generieren:
openssl rand -base64 32
S/MIME
Die Verifikation einer signierten S/MIME-Nachricht erfolgt mit folgendem Befehl:
openssl smime -verify -in signed.msg -noverify -out content.txt
Eine S/MIME-Nachricht kann mit folgendem Befehl verschlüsselt werden:
openssl smime -encrypt -in message.txt -out encrypted.msg -from sender@example.com -to recipient@example.com -subject "Encrypted Message" cert.pem
Eine S/MIME-Nachricht kann mit folgendem Befehl signiert werden:
openssl smime -sign -in message.txt -out signed.msg -from sender@example.com -to recipient@example.com -subject "Signed Message" -signer cert.pem -inkey key.pem
Fazit
OpenSSL ist ein vielseitiges Werkzeug für eine breite Palette von kryptografischen Aufgaben. Es ermöglicht die sichere Kommunikation und den Schutz sensibler Daten. Die Verfügbarkeit für alle Betriebssysteme und die Möglichkeit, Dateien so zu verschlüsseln, dass sie nur von Personen mit dem passenden Schlüssel gelesen werden können, machen es zu einem wichtigen Werkzeug für Sicherheitsenthusiasten.
Siehe auch: OpenSSL Dokumentation