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