Siehe auch [[ssl|SSL]], [[OpenSSL]], [[x509]], [[CA]] {{openssl.zip|OpenSSL}} =====Windows PFX Zertifikat exportieren===== 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 =====SSL Test===== openssl s_client -connect localhost:443 -debug =====Schlüsselpaar erzeugen===== // 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. =====Inhalte mit RSA ver/entschlüsseln===== 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. =====Dateien mit AES ver/entschlüsseln===== 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. =====Datei signieren===== 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 =====Signatur prüfen===== 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 =====Base64===== -A //output in 1 line openssl enc -base64 -in sample.txt -out sample.b64 openssl enc -d -base64 -in sample.b64 -out sample.txt =====Zertifikat===== 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 erstellen===== 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