Benutzer-Werkzeuge

Webseiten-Werkzeuge


openssl

Dies ist eine alte Version des Dokuments!


Siehe auch SSL, OpenSSL, x509, CA

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

Self Signed

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

Key Usage

Beim Erstellen eines Certificate Signing Request (CSR) mit OpenSSL kann man im keyUsage Feld festlegen, wofür das Zertifikat verwendet werden darf.

keyUsage ist eine X.509 v3 Extension, die festlegt, welche kryptografischen Operationen der Schlüssel ausführen darf.

KeyUsage

WertBedeutung
digitalSignature Unterschreiben von Daten (z.B. TLS-Handshake, E-Mail)
nonRepudiation Beweis der Herkunft (nicht abstreitbar)
keyEncipherment Verschlüsselung von Schlüsseln (RSA Key Transport)
dataEncipherment Direktes Verschlüsseln von Nutzdaten
keyAgreement Schlüsselvereinbarung (Diffie-Hellman, ECDH)
keyCertSign Signieren von Zertifikaten (CA-Funktion)
cRLSign Signieren von Certificate Revocation Lists
encipherOnly Nur Verschlüsselung bei Schlüsselvereinbarung
decipherOnly Nur Entschlüsselung bei Schlüsselvereinbarung

ExtendedKeyUsage

Wert Bedeutung
———————– —————————————————————
serverAuth Authentifizierung eines Servers (z. B. HTTPS-Serverzertifikat)
clientAuth Authentifizierung eines Clients (z. B. VPN- oder E-Mail-Client)
codeSigning Signieren von Software oder Skripten
emailProtection S/MIME – Schutz und Signatur von E-Mails
timeStamping Signieren von Zeitstempeln (z. B. bei Signaturerstellung)
OCSPSigning Signieren von OCSP-Responses
msSGC Microsoft Server Gated Cryptography (veraltet)
nsSGC Netscape Server Gated Cryptography (veraltet)
ipsecEndSystem IPsec-Schlüssel für Endsystem (IKE)
ipsecTunnel IPsec-Schlüssel für Tunnelmodus
ipsecUser IPsec-Schlüssel für Benutzer
anyExtendedKeyUsage Beliebiger Zweck erlaubt (kommt selten vor, unscharf)
smartcardLogon Authentifizierung via Smartcard
documentSigning Signieren von Dokumenten
secureEmail Alternative Bezeichnung für emailProtection (RFC 5280)

Beispiele

Webserver-Zertifikat (TLS/SSL):

keyUsage = digitalSignature, keyEncipherment

CA-Zertifikat:

keyUsage = keyCertSign, cRLSign

Code Signing:

keyUsage = digitalSignature

CSR

Einen CSR (Certificate signing request) erstellen.

OpenSSL Konfig

Webserver
[ req ]
default_bits        = 4096
prompt              = no
default_md          = sha256
distinguished_name  = dn
req_extensions      = req_ext

[ dn ]
CN = www.zarat.at
O = Zarat
C = AT

[ req_ext ]
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = www.zarat.at
DNS.2 = zarat.at
DocumentSigning
[ req ]
default_bits        = 4096
prompt              = no
default_md          = sha256
distinguished_name  = dn
req_extensions      = req_ext

[ dn ]
CN = Zarat Signatur
O = Zarat
C = AT

[ req_ext ]
keyUsage = critical, digitalSignature
extendedKeyUsage = codeSigning
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = zarat.at

CSR generieren.

openssl req -new -key private.key -out signing.csr -config openssl-csr.cnf

Diesen CSR sendet man an die CA.

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
openssl.1751536731.txt.gz · Zuletzt geändert: 2025/07/03 11:58 von jango