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
## CA key und ca erstellen openssl req -newkey rsa:2048 -nodes -keyform PEM -keyout apitest01-ca.key -x509 -days 3650 -outform PEM -out apitest01-ca.crt ## intermediate key erzeugen openssl genrsa -out apitest01.key 2048 ## intermediate CSR erzeugen openssl req -new -key apitest01.key -out apitest01.csr ## intermediate mit CA signieren openssl x509 -req -in apitest01.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 100 -days 365 -outform PEM -out apitest01.crt ## client key erzeugen openssl genrsa -out apitest01-client.key 2048 ## client CSR erzeugen openssl req -new -key apitest01-client.key -out apitest01-client.csr ## client cert signieren openssl x509 -req -in apitest01-client.csr -CA apitest01-ca.crt -CAkey apitest01-ca.key -set_serial 101 -days 365 -outform PEM -out apitest01-client.crt ## copy ca cert to pki for apache config (set this into the apache config) cp apitest01-ca.crt /etc/pki/tls/apitest01-ca.crt ## bundle client cert and key into .p12 file openssl pkcs12 -export -inkey apitest01-client.key -in apitest01-client.crt -out apitest01-client.p12