Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
OpenSSL-Verschlüsselung von Zeichenketten
Leider musste ich Anfang des Jahres 2024 (mit FreeBSD 14.0) feststellen, dass OpenSSL die hier genannten Beispiele mit BlowFish (bf-cbc) nicht mehr ausführt. Um diese Kommandos weiterhin ausführen zu können, muß man stattdessen den schwächeren AES (aes-256-cbc) verwenden.
Alle Cipher, die von dem Kommando openssl list -cipher-commands ausgegeben werden, können für die hier genannten Beispiel verwendet werden.
Bei symetrischer Verschlüsselung (z.B. nur mit Passwort), sollte immer die Option -salt verwendet werden!
Symetrische Verschlüsselung
> echo "Hallo Welt!" | openssl enc -aes-256-cbc -pbkdf2 -nosalt -a -kfile passwort.txt -e QvccGfCKCYHw7WHsnGbZow== > echo "QvccGfCKCYHw7WHsnGbZow==" | openssl enc -aes-256-cbc -pbkdf2 -nosalt -a -kfile passwort.txt -d Hallo Welt!
eine Zeichenkette verschlüsseln:
> echo "Hallo Welt!" | openssl enc -aes-256-cbc -nosalt -a -e -K '2222233333232323' -iv '5a04ec902686fb05a6b7a338b6e07760' hex string is too short, padding with zero bytes to length QZ8W91RPs0K10JhdpvwJMA==
eine Zeichenkette entschlüsseln:
> echo "QZ8W91RPs0K10JhdpvwJMA==" | openssl enc -aes-256-cbc -nosalt -a -d -K '2222233333232323' -iv '5a04ec902686fb05a6b7a338b6e07760' hex string is too short, padding with zero bytes to length Hallo Welt!
Asymetrische Verschlüsselung mit S/MIME (E-Mail-Format)
mit RSA-Schlüssel/Zertifikat
zur Vorbereitung müssen wir einen privaten Schlüssel mit dazugehörigem Zertifikat erzeugen:
> openssl req -rand /dev/urandom -new -x509 -newkey rsa:4096 -sha3-512 -nodes -keyout openssl_private_key.pem -keyform PEM -out openssl_public_zertifikat.pem -outform PEM -days 7000 -subj /emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname > ls -1 *.pem openssl_private_key.pem openssl_public_zertifikat.pem
einen dazugehörigen öffentlichen SSL-Schlüssel erzeugen (den brauchen wir hierfür aber nicht):
> openssl pkey -in openssl_private_key.pem -out openssl_public_key.pem -outform PEM -pubout
Das Zertifikat schicke ich meinem Kommunikationspartner, damit er mir verschlüsselte Nachrichten schicken kann. Der private Schlüssel darf niemals den Rechner verlassen, auf dem er erzeugt wurde, weil jede Art der Datenübertragung, Angriffsflächen für eine kompromittierung bietet.
eine Zeichenkette mit einem Zertifikat verschlüsseln:
> echo "Hallo Welt!" | openssl smime -encrypt -aes256 openssl_public_zertifikat.pem > verschluesselte_nachricht.txt
die verschlüsselte Zeichenkette mit dem privaten Schlüssel entschlüsseln:
> cat verschluesselte_nachricht.txt | openssl smime -decrypt -inkey openssl_private_key.pem openssl_public_zertifikat.pem Hallo Welt! oder so > cat verschluesselte_nachricht.txt | openssl smime -decrypt -inkey openssl_private_key.pem Hallo Welt!
The smime utility uses PKCS#7 which doesn't support anything other than RSA for the enveloped data type.
mit ED26619-Schlüssel/Zertifikat
einen privaten SSL-Schlüssel mit Zertifikat erzeugen:
> openssl req -rand /dev/urandom -new -x509 -newkey ED25519 -sha3-512 -nodes -keyout openssl_private_key.pem -keyform PEM -out openssl_public_zertifikat.pem -outform PEM -days 7000 -subj "/emailAddress=email@adresse.de/C=DE/ST=Hessen/L=Frankfurt/O=Firma/OU=Abteilung/CN=Hostname" > ls -1 *.pem openssl_private_key.pem openssl_public_zertifikat.pem
> openssl crl2pkcs7 -nocrl -certfile openssl_public_zertifikat.pem -out openssl_public_zertifikat.p7b > echo "Hallo Welt!" | openssl smime -encrypt -aes256 openssl_public_zertifikat.p7b > verschluesselte_nachricht.txt Could not read recipient certificate file from openssl_public_zertifikat.p7b Unable to load recipient certificate file
Eine Zeichenkette mit einem ED26619-Zertifikat zu verschlüsseln, funktionierte bei mir leider nicht.
