Erstellung Certificate Signing Requests
Anleitung zur Erstellung eines privaten Schlüssels und Certificate Signing Requests mit openssl unter Linux.
Vorüberlegungen
Bitte entscheiden Sie in folgenden Punkten:
Art des Schlüssels
Sie können einen RSA- oder EC-Schlüssel erzeugen. Bei EC skaliert die Sicherheit mit der Schlüssellänge besser als bei RSA. EC-Schlüssel sind bei gleicher Sicherheit kürzer als RSA-Schlüssel, sodass im TLS-Handshake zwischen Client und Server weniger Daten zu übermitteln sind. Der Handshake ist damit evtl. etwas schneller.
Empfehlung 11/2022 der IT-Sicherheit des HRZ: Nutzen Sie bevorzugt EC-Schlüssel.
OCSP-Stapling
Früher haben wir hier empfohlen, OCSP-Staping zu konfigurieren. Dies wird aktuell (03/2024) von der IT-Sicherheit des HRZ nicht mehr empfohlen.
Privaten Schlüssel erzeugen
Erzeugen Sie auf Ihrem Server einen privaten Schlüssel.
Wenn Ihr Zertifikat abgelaufen ist und Sie es verlängern wollen, werden Sie i.allg. keinen neuen privaten Schlüssel erzeugen, sondern den bisherigen weiter nutzen.
Sollten Sie jedoch den Verdacht haben, dass unberechtigten Dritte Zugriff auf den privaten Schlüssel hatten, oder falls Sie auf eine sicherere Variante (mehr Bits, EC statt RSA) wecheln wollen, erneuern Sie auch den privaten Schlüssel.
EC
Ein EC-Schlüssel sollte mind. 384 Bits lang sein, wählen Sie für Option "-name" einen passenden Wert (siehe "openssl ecparam -list_curves").
openssl ecparam -out priv.pem -name brainpoolP384r1 -genkey
Die folgenden elliptischen Kurven werden empfohlen:
- brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 (siehe RFC5639 und RFC7027),
- sollten diese Kurven nicht verfügbar sein oder von SCM abgewiesen werden, so können auch die folgenden Kurven eingesetzt werden: secp256r1, secp384r1, secp521r1
(Empfehlung 11/2022 der IT-Sicherheit des HRZ).
Aktuell (02/2023) werden die oben durchgestrichenen Kurven von SCM noch nicht unterstützt.
RSA
Ein RSA-Schlüssel sollte mindestens 3072 Bit, besser 4096 lang sein.
openssl genrsa -out priv.pem 4096
Die Datei priv.pem
enthält den privaten Schlüssel und sollte entsprechend sicher abgelegt sein, also insbes. durch andere auf dem Rechner eingeloggte User nicht lesbar sein.
Den privaten Schlüssel werden Sie i.allg. nicht verschlüsseln und mit einer Passphrase versehen wollen, da Sie ansonsten diese Passphrase bei jedem Neustart desjenigen Dienstes, der das Zertifikat nutzt, eingeben müssten.
Wenn Sie priv.pem
erneut erzeugen und dabei eine alte Version überschreiben, passen auch eventuell vorher erzeugte Requests und Zertifikate nicht mehr und müssen ggf. ebenfalls neu erstellt werden!
Diffie-Hellman-Parameter erzeugen
Nur für RSA:
Erzeugen Sie für den Diffie-Hellman-Schlüsselaustausch eine eigene Parameterdatei mit passender Bit-Anzahl wie für den privaten Schlüssel.
Diese Datei ist optional und wird ggf. erst später bei der Einrichtung des Zertifikats auf dem Server benötigt. Wenn Sie keine eigenen DH-Parameter erzeugen, wird Ihr Dienst Standard-Parameter benutzen.
openssl dhparam -outform pem -out dhparam.pem 4096
Dies kann etliche Minuten dauern.
Informationen für Zertifikats-Antrag vorbereiten
Sie können die notwendigen Paramater für die Erzeugung der Request-Datei zwar auch direkt per Option an openssl übergeben, jedoch wird es dann evtl. später schwieriger nachzuvollziehen sein, was Sie genau gemacht haben. Daher empfehlen wir, eine Config-Datei für den openssl-Aufruf anzulegen, sofern Sie nicht andere Möglichkeiten nutzen (Skripte, Ansible, Saltstack o.ä.).
Speichern Sie den folgenden Text als Datei my_openssl.cnf
ab und führen Sie in den gekennzeichneten Bereichen die Anpassungen für Ihren Request durch.
##################################################
## Bitte tragen Sie in den mit "###" gekennzeichneten
## Bereichen die für Ihren Request spezifischen Werte ein.
##################################################
[ req ]
distinguished_name = req_distinguished_name
attributes = req_attributes
req_extensions = v3_req
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = DE
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Hessen
localityName = Locality Name (eg, city)
localityName_default = Gießen
0.organizationName = Organization Name (eg, company)
0.organizationName_default = Justus-Liebig-Universität Gießen
organizationalUnitName = Organizational Unit Name (eg. FB08, Physik)
############################### # ################
organizationalUnitName_default = FB123
############################### # ################
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
############################### # ################
commonName_default = my-srv.sonst.uni-giessen.de
############################### # ################
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
[ v3_req ]
basicConstraints = CA:FALSE
##################################################
## Wenn Ihr Server unter mehreren Hostnamen (Aliase; diese müssen natürlich
## im DNS eingetragen sein) erreichbar sein soll, dann
## 1. entfernen Sie in der Zeile "subjectAltName" unten des führende "#",
## 2. tragen Ihren oben bei commonName_default vermerkten Hostnamen
## als ersten DNS-Wert ein,
## 3. führen Ihre weiteren Aliase als weitere DNS-Werte auf,
## im Beispiel hier also 1 Hostname (my-srv.sonst.uni-giessen.de)
## mit 2 Aliasen.
################ # ################
# subjectAltName = DNS:my-srv.sonst.uni-giessen.de, DNS:my-srv-alias1.sample.uni-giessen.de, DNS:my-srv-alias2.smaple.uni-giessen.de
################ # ################
##
##################################################
## Wenn das Zertifikat mit Erweiterung "OCSP Must Staple" erzeugt werden soll, entfernen Sie in der Zeile "tlsfeature" das führende "#"
############# # ###################
# tlsfeature = status_request
############# # ###################
Sofern Sie von früheren Anträgen noch eine solche Datei vorliegen haben, können Sie diese (nach Prüfung und ggf. Anpassung) verwenden.
Änderungen beim Umstieg von DFN-PKI auf Sectigo Certificate Manager
Gegenüber der DFN-PKI (bis 12/2022) haben sich folgende Änderungen ergeben:
- Die Angabe einer Mail-Adresse im Zertifikat ist nicht mehr notwendig. Sofern Sie angegeben ist, wird sie evtl. auch nicht in das Zertifikat übernommen.
- Die Komponenten des DN (organizationName, locality) sind nun in offizieller Schreibweise, also mit "ß" statt "ss" und "ä" statt "ae" aufzuführen.
- Neu ist die optionale Nutzung von "tlsfeature=status_request" für "OCSP Must Staple" (Empfehlung der IT-Sicherheit von 03/2024: nicht nutzen).
CSR-Datei erzeugen
Erzeugen Sie zu Ihrem privaten Schlüssel eine CSR-Datei (PKCS#10 im PEM-Format):
openssl req -config my_openssl.cnf -key priv.pem -new -utf8 -out req.pem
Die in der obigen Config-Datei eingetragenen Werte für Land (C
), Org-Einheit (OU
), Server-Name (CN
) etc. werden dann als Vorgabe-Werte angezeigt; Sie können alles durch "Enter" übernehmen.
Prüfen Sie die erzeugte CSR-Datei req.pem
mit
openssl req -in req.pem -text -noout -utf8
Wenn Sie Fehler feststellen, korrigieren Sie die Config-Datei entsprechend und erzeugen die CSR-Datei erneut.
Antrag einreichen
Sie können die CSR-Datei nun zur Genehmigung und Erzeugung des Zertifikats einreichen, siehe her.
Zertifikat einrichten
Sobald Ihr Antrag vom PKI-Team des HRZ genehmigt wurde, erhalten Sie Ihr Zertifikat per Mail, oder Sie können es beim TCS-Dienst, wo Sie es beantragt haben, herunterladen.
Bitte beachten Sie auch unsere Hinweise zur Installation von Server-Zertifikaten.