SSL-Zertifikate Erstellen¶
Für eine verschlüsselte Verbindung zwischen Client und Server benötigst du einen gültigen Satz von SSL-Zertifikaten. Falls dein Unternehmen keine eigene Certificate Authority (CA) betreibt, musst du eine selbstsignierte CA erstellen.
Diese Anleitung zeigt dir, wie du mit dem Kommandozeilen-Tool openssl
eine CA sowie Server- und Client-Zertifikate erzeugst. Unter Windows kannst du OpenSSL bequem über das Windows Subsystem for Linux (WSL) installieren und nutzen.
Erstelle alle Zertifikate und Schlüssel in einem separaten Unterverzeichnis. Zum Schluss kopierst du die benötigten Dateien in die jeweiligen Anwendungsverzeichnisse.
Bemerkung
Die gezeigten Zertifikate und Schlüssel sind für ein Testsystem gedacht. Für einen Produktiven Einsatz:
Fordere Zertifikate von der Certificate Authority deiner Firma an.
Verwende aussagekräftige Namen, statt
client.crt
oderserver.crt
.Verwende Post-Quanten-Kryptographie, also beispielsweise Elliptic Curve Algorithmen statt RSA.
1. Konfiguration erstellen¶
Erstelle zunächst ein Unterverzeichnis für die Schlüssel und Zertifikate. Lege darin eine Konfigurationsdatei openssl.cnf
an. Diese Datei definiert die grundlegenden Einstellungen für die Zertifikatserstellung.
Öffne die Datei in einem Texteditor deiner Wahl und kopiere den folgenden Inhalt hinein:
[ req ]
default_bits = 2048
default_md = sha256
[ v3_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true, pathlen:0
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
Erklärung
Diese Datei legt fest, welche Eigenschaften die erstellten Zertifikate haben und welche Zwecke sie erfüllen dürfen.
Abschnitt ``[req]``
Dieser Abschnitt enthält allgemeine Einstellungen für die Zertifikatserstellung.
default_bits = 2048
→ Legt die Schlüssellänge auf 2048 Bit fest. Dies bietet eine gute Balance zwischen Sicherheit und Performance.default_md = sha256
→ SHA-256 wird als Hash-Algorithmus für die Signierung verwendet, da ältere Algorithmen wie SHA-1 nicht mehr als sicher gelten.
Abschnitt ``[v3_ca]``
Dieser Abschnitt definiert die Parameter für ein CA-Zertifikat (Certificate Authority).
subjectKeyIdentifier = hash
→ Erstellt einen eindeutigen Fingerabdruck des öffentlichen Schlüssels zur Identifikation der CA.authorityKeyIdentifier = keyid:always,issuer
→ Referenziert die CA anhand ihres Schlüssel-IDs und ihres Zertifikatsausstellers.basicConstraints = critical, CA:true, pathlen:0
→ Markiert das Zertifikat als Root-CA (CA:true
).→critical
bedeutet, dass Clients dieses Feld zwingend interpretieren müssen.→pathlen:0
schränkt die CA darauf ein, keine weiteren Unter-CA-Zertifikate auszustellen.keyUsage = critical, digitalSignature, cRLSign, keyCertSign
→ Gibt an, dass die CA digitale Signaturen erstellen, Zertifikate signieren (keyCertSign
) und Sperrlisten (cRLSign
) ausstellen darf.
Abschnitt ``[v3_req]``
Dieser Abschnitt definiert die Parameter für reguläre (nicht-CA) Zertifikate, z. B. für Server oder Clients.
basicConstraints = CA:FALSE
→ Stellt sicher, dass dieses Zertifikat kein CA-Zertifikat ist.keyUsage = digitalSignature, keyEncipherment
→ Erlaubt die Verwendung für digitale Signaturen (digitalSignature
) und zum Verschlüsseln von Schlüsseln (keyEncipherment
), was z. B. für TLS-Verbindungen erforderlich ist.extendedKeyUsage = serverAuth, clientAuth
→ Gibt an, dass das Zertifikat sowohl für Server- als auch Client-Authentifizierung genutzt werden kann.
Diese Konfiguration stellt sicher, dass die erstellten Zertifikate den üblichen Sicherheitsstandards entsprechen und von modernen Anwendungen akzeptiert werden.
2. CA erstellen (Root-Zertifikat)¶
Die Certificate Authority (CA) stellt das zentrale Root-Zertifikat bereit, mit dem die später erstellten Server- und Client-Zertifikate signiert werden. Dadurch können sich die Komponenten gegenseitig als vertrauenswürdig authentifizieren.
2.1 CA-Privatschlüssel erstellen¶
Zunächst erzeugst du den privaten Schlüssel für die CA. Dieser Schlüssel wird benötigt, um Zertifikate zu signieren.
PS C:\certs> openssl genpkey -algorithm RSA -out ca.key -aes256 -pass pass:geheimespasswort
Erklärung
genpkey -algorithm RSA
→ Erstellt einen privaten RSA-Schlüssel.-out ca.key
→ Speichert den Schlüssel in der Dateica.key
.-aes256
→ Verschlüsselt den Schlüssel mit AES-256 für zusätzliche Sicherheit.-pass pass:geheimespasswort
→ Setzt ein Passwort für den Schlüssel (in einer Produktionsumgebung sollte eine sichere Passwortdatei verwendet werden).
Entstehende Datei:
ca.key
– Der private Schlüssel der CA, der zum Signieren von Zertifikaten verwendet wird. Er sollte niemals weitergegeben oder unverschlüsselt gespeichert werden.
2.2 Selbstsigniertes CA-Zertifikat erstellen¶
Nun erstellst du mit dem privaten Schlüssel ein selbstsigniertes Zertifikat für die CA. Dieses Zertifikat dient als Vertrauensanker für alle weiteren Zertifikate.
PS C:\certs> openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -passin pass:geheimespasswort -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=MyCA" -config openssl.cnf -extensions v3_ca
Erklärung
req -x509
→ Erstellt ein selbstsigniertes Zertifikat.-new -nodes
→ Generiert eine neue Zertifikatsanforderung ohne zusätzlichen Passwortschutz.-key ca.key
→ Verwendet den zuvor erstellten privaten CA-Schlüssel.-days 3650
→ Legt die Gültigkeit auf 10 Jahre fest.-out ca.crt
→ Speichert das Zertifikat inca.crt
.-subj "...
→ Enthält die Zertifikatsinformationen (Land, Kanton, Stadt, Organisation, Abteilung, Common Name).-config openssl.cnf
→ Verwendet die Konfiguration aus der Dateiopenssl.cnf
.-extensions v3_ca
→ Verwendet die zusätzlichen Optionen unter dem Abschnittv3_ca
.
Entstehende Datei:
ca.crt
– Das Root-Zertifikat der CA. Es muss auf Server und Clients installiert werden, damit signierte Zertifikate als vertrauenswürdig gelten.
3. Server-Zertifikat erstellen¶
Damit sich der Server gegenüber Clients als vertrauenswürdig ausweisen kann, wird ein eigenes Zertifikat benötigt. Dieses wird von der zuvor erstellten CA signiert.
3.1 Privaten Schlüssel für den Server generieren¶
Erstelle zunächst den privaten Schlüssel für den Server.
PS C:\certs> openssl genpkey -algorithm RSA -out server.key
Erklärung
genpkey -algorithm RSA
→ Erstellt einen RSA-Schlüssel.-out server.key
→ Speichert den Schlüssel in der Dateiserver.key
.
Entstehende Datei:
server.key
– Der private Schlüssel des Servers. Darf nicht weitergegeben oder öffentlich zugänglich gemacht werden.
3.2 Zertifikatsanforderung (CSR) erstellen¶
Mit dem privaten Schlüssel erzeugst du eine Zertifikatsanforderung (Certificate Signing Request, CSR).
PS C:\certs> openssl req -new -key server.key -out server.csr -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=server.local" -config openssl.cnf -extensions v3_req
Erklärung
req -new
→ Erstellt eine neue Zertifikatsanforderung.-key server.key
→ Verwendet den zuvor generierten privaten Schlüssel.-out server.csr
→ Speichert die Zertifikatsanforderung in der Dateiserver.csr
.-subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=server.local"
→ Enthält die Zertifikatsinformationen:C=CH
→ Land (Schweiz)ST=Bern
→ Bundesland/KantonL=Bern
→ StadtO=EducateIT
→ OrganisationOU=IT
→ AbteilungCN=server.local
→ Common Name (Hostname des Servers, sollte dem tatsächlichen FQDN entsprechen)
-config openssl.cnf
→ Verwendet die Konfiguration aus der Dateiopenssl.cnf
.-extensions v3_req
→ Verwendet die zusätzlichen Optionen unter dem Abschnittv3_req
.
Entstehende Datei
server.csr
– Die Zertifikatsanforderung, die von der CA signiert wird.
3.3 Server-Zertifikat mit der CA signieren¶
Nun signierst du die Zertifikatsanforderung mit der CA.
PS C:\certs> openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -passin pass:geheimespasswort -extfile openssl.cnf -extensions v3_req
Erklärung
x509 -req
→ Erstellt ein X.509-Zertifikat basierend auf einer Zertifikatsanforderung.-in server.csr
→ Verwendet die zuvor erstellte CSR.-CA ca.crt
→ Die Zertifizierungsstelle (Root-Zertifikat), die das Zertifikat signiert.-CAkey ca.key
→ Der private Schlüssel der CA, der für die Signatur verwendet wird.-CAcreateserial
→ Erstellt eine Seriennummer-Datei (ca.srl
), falls sie nicht existiert.-out server.crt
→ Speichert das signierte Server-Zertifikat in der Dateiserver.crt
.-days 365
→ Legt die Gültigkeitsdauer des Zertifikats auf 365 Tage fest.-passin pass:geheimespasswort
→ Übergibt das Passwort für den privaten Schlüssel der CA.-extfile openssl.cnf
→ Verwendet die Konfiguration aus der Dateiopenssl.cnf
für die Erweiterungen.-extensions v3_req
→ Verwendet die zusätzlichen Optionen unter dem Abschnittv3_req
.
Entstehende Dateien:
server.crt
– Das signierte Server-Zertifikat.ca.srl
– Datei zur Speicherung der letzten Seriennummer.
4. Client-Zertifikat erstellen¶
Damit sich der Client gegenüber dem Server authentifizieren kann, benötigt er ein eigenes Zertifikat.
4.1 Privaten Schlüssel für den Client generieren¶
Erstelle zunächst den privaten Schlüssel für den Client.
PS C:\certs> openssl genpkey -algorithm RSA -out client.key
Erklärung
genpkey -algorithm RSA
→ Erstellt einen RSA-Schlüssel.-out client.key
→ Speichert den Schlüssel in der Dateiclient.key
.
Entstehende Datei:
client.key
– Der private Schlüssel des Clients.
4.2 Zertifikatsanforderung (CSR) erstellen¶
Erzeuge die Zertifikatsanforderung mit dem Client-Schlüssel.
PS C:\certs> openssl req -new -key client.key -out client.csr -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=client.local" -config openssl.cnf -extensions v3_req
Erklärung
req -new
→ Erstellt eine neue Zertifikatsanforderung.-key client.key
→ Verwendet den zuvor generierten privaten Schlüssel.-out client.csr
→ Speichert die Zertifikatsanforderung in der Dateiclient.csr
.-subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=client.local"
→ Enthält die Zertifikatsinformationen:C=CH
→ Land (Schweiz)ST=Bern
→ Bundesland/KantonL=Bern
→ StadtO=EducateIT
→ OrganisationOU=IT
→ AbteilungCN=client.local
→ Common Name (Hostname des Servers, sollte dem tatsächlichen FQDN entsprechen)
-config openssl.cnf
→ Verwendet die Konfiguration aus der Dateiopenssl.cnf
.-extensions v3_req
→ Verwendet die zusätzlichen Optionen unter dem Abschnittv3_req
.
Entstehende Datei
client.csr
– Die Zertifikatsanforderung, die von der CA signiert wird.
4.3 Client-Zertifikat mit der CA signieren¶
Signiere die Zertifikatsanforderung mit der CA.
PS C:\certs> openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -passin pass:geheimespasswort -extfile openssl.cnf -extensions v3_req
Erklärung
x509 -req
→ Erstellt ein X.509-Zertifikat basierend auf einer Zertifikatsanforderung.-in client.csr
→ Verwendet die zuvor erstellte CSR.-CA ca.crt
→ Die Zertifizierungsstelle (Root-Zertifikat), die das Zertifikat signiert.-CAkey ca.key
→ Der private Schlüssel der CA, der für die Signatur verwendet wird.-CAcreateserial
→ Erstellt eine Seriennummer-Datei (ca.srl
), falls sie nicht existiert.-out client.crt
→ Speichert das signierte Server-Zertifikat in der Dateiclient.crt
.-days 365
→ Legt die Gültigkeitsdauer des Zertifikats auf 365 Tage fest.-passin pass:geheimespasswort
→ Übergibt das Passwort für den privaten Schlüssel der CA.-extfile openssl.cnf
→ Verwendet die Konfiguration aus der Dateiopenssl.cnf
für die Erweiterungen.-extensions v3_req
→ Verwendet die zusätzlichen Optionen unter dem Abschnittv3_req
.
Entstehende Dateien:
client.crt
– Das signierte Server-Zertifikat.ca.srl
– Datei zur Speicherung der letzten Seriennummer.
5. Zertifikate prüfen¶
Überprüfe die Zertifikate mit:
PS C:\certs> openssl verify -CAfile ca.crt server.crt
PS C:\certs> openssl verify -CAfile ca.crt client.crt
Erklärung
openssl verify
→ Überprüft, ob ein Zertifikat von einer bestimmten CA ausgestellt wurde.-CAfile ca.crt
→ Gibt das Root-Zertifikat der CA an, mit dem die Prüfung erfolgt.server.crt
undclient.crt
→ Die zu überprüfenden Zertifikate.
Falls die Zertifikate korrekt signiert wurden, erhältst du eine Ausgabe wie:
server.crt: OK
client.crt: OK
6. Kopieren der Zertifikate und Schlüssel¶
Nun müssen die erstellten Zertifikate und Schlüssel in die jeweiligen Anwendungsverzeichnisse kopiert werden.
6.1 Kopieren der Dateien auf den Server¶
Kopiere folgende Dateien in das Anwendungsverzeichnis des Servers:
ca.crt
→ Root-Zertifikat der CA (wird benötigt, um Client-Zertifikate zu verifizieren)server.crt
→ Server-Zertifikatserver.key
→ Privater Schlüssel des Serversclient.crt
→ Falls der Server das Client-Zertifikat für Authentifizierungszwecke benötigt
6.2 Kopieren der Dateien auf den Client¶
Kopiere folgende Dateien in das Anwendungsverzeichnis des Clients:
ca.crt
→ Root-Zertifikat der CA (wird benötigt, um das Server-Zertifikat zu verifizieren)client.crt
→ Client-Zertifikatclient.key
→ Privater Schlüssel des Clientsserver.crt
→ Falls der Client das Server-Zertifikat benötigt, um eine sichere Verbindung herzustellen
Alle Kommandos im Überblick¶
Hier nochmals alle Kommandos um Überblick. Wenn du sie in eine Skript Datei kopierst, kannst du sie schnell und unkompliziert ausführen um Testzertifikate zu erstellen.
openssl genpkey -algorithm RSA -out ca.key -aes256 -pass pass:geheimespasswort
openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -passin pass:geheimespasswort -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=MyCA" -config openssl.cnf -extensions v3_ca
openssl genpkey -algorithm RSA -out server.key
openssl req -new -key server.key -out server.csr -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=server.local" -config openssl.cnf -extensions v3_req
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 365 -passin pass:geheimespasswort -extfile openssl.cnf -extensions v3_req
openssl genpkey -algorithm RSA -out client.key
openssl req -new -key client.key -out client.csr -subj "/C=CH/ST=Bern/L=Bern/O=EducateIT/OU=IT/CN=client.local" -config openssl.cnf -extensions v3_req
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 365 -passin pass:geheimespasswort -extfile openssl.cnf -extensions v3_req
openssl verify -CAfile ca.crt server.crt
openssl verify -CAfile ca.crt client.crt