Dies ist eine alte Version des Dokuments!
Siehe auch SSL
openssl pkcs12 -in certificate.pfx -nocerts -out privatekey.key -nodes openssl pkcs12 -in certificate.pfx -clcerts -nokeys -out certificate.crt openssl pkcs12 -in certificate.pfx -out certificate.pem -nodes
openssl s_client -connect localhost:443 -debug
// generate private key openssl genrsa 2048 > test.pri // with password // important to write bitsize (2048) as the last parameter openssl genrsa -aes128 -passout pass:foobar 2048 > test.pri // export public key openssl rsa -in test.pri -pubout > test.pub //verify openssl rsa -pubin -in test.pub -text -noout openssl rsa -in test.pri -check -text -noout
Der private Schlüssel ist streng geheim, der öffentliche kann wie eine Telefonnummer mit jedem geteilt werden.
Möchte A an B eine verschlüsselte Nachricht senden, nimmt A den öffentlichen Schlüssel von B und verschlüsselt die Nachricht damit (asymmetrisches Verfahren). Entschlüsseln kann sie nur B mit seinem privaten Schlüssel.
openssl rsautl -in secret.txt -out secret.txt.enc -pubin -inkey test.pub -encrypt openssl rsautl -in secret.txt.enc -out secret.txt -inkey test.pri -decrypt
ACHTUNG: Ist der zu verschlüsselnde Inhalt länger als der bei der Schlüsselerstellung verwendete Modulus funktioniert RSA nicht und man verwendet AES.
Dabei wird der Inhalt nicht mit dem Public Key des Gegenüber sondern mit einem Passwort verschlüsselt (symmetrisches Verfahren) das man auch zum Entschlüsseln kennen muss!
openssl aes-256-cbc -e -in file.zip -out file.zip.enc openssl aes-256-cbc -d -in file.zip.enc -out file.zip
Das Passwort kann wieder mit RSA verschlüsselt werden.
Die Signierung (asymmetrisches Verfahren) dient als Beweis das eine Datei tatsächlich von besagtem Absender stammt. Möchte A die Datei, die er an B schickt signieren, nimmt A seinen privaten Schlüssel und erstellt in Verbindung mit dem Inhalt eine Signatur. Diese wird mit dem Inhalt mitgeschickt.
openssl dgst -sha256 -sign test.pri -out file.txt.sig.tmp file.txt openssl base64 -in file.txt.sig.tmp -out file.txt.sig
B nimmt den öffentlichen Schlüssel von A und kann in Verbindung mit der Signatur feststellen, ob sie tatsächlich von A mit seinem privaten Schlüssel (den nur A hat) signiert wurde.
openssl base64 -d -in file.txt.sig -out file.txt.sig.tmp openssl dgst -sha256 -verify test.pub -signature file.txt.sig.tmp file.txt
-A //output in 1 line openssl enc -base64 -in sample.txt -out sample.b64 openssl enc -d -base64 -in sample.b64 -out sample.txt
Konfiguration erstellen.
openssl.cnf
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C = AT ST = Vienna L = Vienna O = Brainworx OU = Cloud Services CN = nextcloud.local
Keys und Zertifikat erstellen
openssl req -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -config openssl.cnf
Siehe x509
ROOT-CA Config
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C = AT ST = Vienna L = Vienna O = Root Authority OU = Root CA CN = root-ca.local
INTERMEDIATE-CA Config
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C = AT ST = Vienna L = Vienna O = Brainworx OU = Intermediate CA CN = intermediate-ca.local
CLIENT Config
[req] default_bits = 2048 prompt = no default_md = sha256 distinguished_name = dn [dn] C = AT ST = Vienna L = Vienna O = Brainworx OU = Cloud Services CN = nextcloud.local
@echo off @rem Root CA Key und selbst-signiertes Zertifikat erstellen openssl req -newkey rsa:2048 -nodes -keyout apitest01-ca.key -x509 -days 3650 -out apitest01-ca.crt -config root-openssl.cnf pause @rem Intermediate CA Key erzeugen openssl genrsa -out apitest01-intermediate.key 2048 pause @rem Intermediate CA CSR erzeugen openssl req -new -key apitest01-intermediate.key -out apitest01-intermediate.csr -config intermediate-openssl.cnf pause @rem Intermediate CA mit Root CA signieren openssl x509 -req -in apitest01-intermediate.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 100 -days 3650 -out apitest01-intermediate.crt pause @rem Client Key erzeugen openssl genrsa -out apitest01-client.key 2048 pause @rem Client CSR erzeugen openssl req -new -key apitest01-client.key -out apitest01-client.csr -config client-openssl.cnf pause @rem Client Zertifikat mit Intermediate CA signieren openssl x509 -req -in apitest01-client.csr -CA apitest01-intermediate.crt -CAkey apitest01-intermediate.key -set_serial 101 -days 365 -out apitest01-client.crt pause @rem --- Client Zertifikat und Schlüssel in .p12 Datei exportieren --- @rem Bündle Client Zertifikat und Schlüssel in eine PKCS#12 Datei openssl pkcs12 -export -inkey apitest01-client.key -in apitest01-client.crt -out apitest01-client.p12 pause