Eigene X.509 Root-CA erstellen (selbstsigniert)
Einleitung
TLS-Zertifikate sorgen dafür, dass Verbindungen im Internet oder im Intranet verschlüsselt und vertrauenswürdig sind. Normalerweise bezieht man Zertifikate von öffentlichen Zertifizierungsstellen (z. B. Let's Encrypt). Für interne Dienste (z. B. Test-Webserver, MQTT-Broker) kann man jedoch selbst eine Certificate Authority (CA) betreiben.
In diesem Tutorial lernst du:
-
eine eigene selbstsignierte Root-CA zu erstellen
-
damit Server-Zertifikate zu signieren
-
Zertifikate zu prüfen und einzusetzen
Vorbereitung
Wir brauchen eine Linux Umgebung, ich nutze hierfür eine virtuelle Debian Maschine.
Zuerst überprüfen wir, ob OpenSSL installiert ist:
openssl version
Wenn die Ausgabe so ähnlich aussieht wie hier, dann passt alles:
OpenSSL 3.0.17 1 Jul 2025 (Library: OpenSSL 3.0.17 1 Jul 2025)
ansonsten muss OpenSSL erst installiert werden:
apt update && apt install openssl -y
Danach erstellen wir einen neuen Ordner (im Home-Verzeichnis), in dem alle Dateien abgelegt werden:
mkdir -p ~/certs
cd ~/certs
Root-CA Schlüssel & Zertifikat erstellen
Im nächsten Schritt erstellen wir den privaten Schlüssel für unsere Root-CA:
entweder einen RSA Schlüssel:
openssl genrsa -out myCA.key 2048
oder einen modernen EC Schlüssel:
openssl ecparam -genkey -name prime256v1 -out myCA.key
Dann schreiben wir eine kleine Konfig Datei, welche die wichtigsten Informationen über das zu erstellende Zertifikat enthält:
nano myCA.conf
# =========================================
# OpenSSL Self Signed Root CA Configuration
# =========================================
[ req ]
default_md = sha256 # Default message digest
distinguished_name = req_dn # Default DN template
string_mask = utf8only # UTF-8 encoding
prompt = no # Non-interactive mode
x509_extensions = v3_x509 # when req -x509 is in use
[ req_dn ]
C = DE
# ST = Rheinland Pfalz
# L = Mainz
O = Meine fiktive Organisation
# OU = Certificate Authority
CN = My Root CA
# Das gleiche, nur mit langen Key-Namen
# [ req_dn ]
# countryName = DE
# stateOrProvinceName = Rheinland Pfalz
# localityName = Mainz
# organizationName = Meine fiktive Organisation
# organizationalUnitName = Certificate Authority
# commonName = My Root CA
[ v3_x509 ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, keyCertSign
Jetzt können wir das selbstsignierte Zertifikat erstellen:
openssl req -new -x509 -config myCA.conf -key myCA.key -days 1825 -out myCA.crt
Wir haben jetzt drei Dateien:
root@debian-vm:~/certs# ls -l
insgesamt 12
-rw-r--r-- 1 root root 1184 12. Aug 14:56 myCA.conf
-rw-r--r-- 1 root root 737 12. Aug 14:57 myCA.crt
-rw------- 1 root root 302 12. Aug 14:55 myCA.key
Wir prüfen das Root-CA Zertifikat:
openssl x509 -in myCA.crt -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
7d:15:98:b4:b6:78:6e:d0:07:88:fe:d5:83:6d:21:fc:e6:04:6e:8a
Signature Algorithm: ecdsa-with-SHA256
Issuer: C = DE, O = Meine fiktive Organisation, CN = My Root CA
Validity
Not Before: Aug 12 12:57:25 2025 GMT
Not After : Feb 1 12:57:25 2031 GMT
Subject: C = DE, O = Meine fiktive Organisation, CN = My Root CA
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:c9:f3:a9:ff:19:6c:dc:86:6f:5f:b6:a8:96:28:
24:2d:33:ba:97:17:e4:ea:94:1b:da:82:3d:ba:0e:
42:47:de:75:5c:25:85:48:70:98:fd:62:ec:57:47:
5c:0c:9a:cf:8c:10:51:e4:9f:2c:47:a2:1a:1f:1e:
27:79:26:41:46
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Subject Key Identifier:
59:0D:28:CB:78:4A:42:33:E5:09:1B:6F:7C:9E:2D:2B:27:A1:B7:69
X509v3 Authority Key Identifier:
59:0D:28:CB:78:4A:42:33:E5:09:1B:6F:7C:9E:2D:2B:27:A1:B7:69
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Digital Signature, Certificate Sign
Signature Algorithm: ecdsa-with-SHA256
Signature Value:
30:44:02:20:28:43:95:cc:9b:b5:fa:18:e4:8e:37:e1:83:39:
c1:d1:66:c7:15:eb:f9:79:66:3b:aa:f6:35:dc:cf:64:4b:f5:
02:20:75:ae:3e:6d:08:aa:25:83:b6:91:bf:2f:eb:9a:97:be:
89:b5:12:a3:e5:1c:be:65:2d:fd:ea:c4:86:fa:4a:10
Wie wir sehen, sind Issuer und Subjekt die gleiche Entität, es ist ja auch ein selbst signiertes Zertifikat. Das bedeutet, dass die CA sich selbst bestätigt und keinen externen Aussteller hat.
Root-CA Zertifikat installieren
Um eine echte CA zu werden, müssten wir das Root-CA Zertifikat nun auf allen Geräten weltweit installieren. Da wir aber nur unsere eigene CA werden wollen, reicht es, das Zertifikat auf unseren eigenen Geräten zu installieren.
Wir werden das Zertifikat nun auf einer Windows Maschine installieren. Dazu muss das Zertifikat auf die entsprechende Maschine übertragen werden.
Wenn das Zertifikat auf der Windows Maschine gelandet ist, können wir loslegen:
-
WIN + R --> mmc eingeben --> Ok
-
Datei --> Snap-In hinzufügen/entfernen
-
Nach unten scrollen --> Zertifikate auswählen --> Hinzufügen
-
Computerkonto auswählen
-
Lokalen Computer auswählen
-
Vertrauenswürdige Stammzertifizierungsstellen --> Zertifikate --> Rechtsklick --> Alle Aufgaben --> Importieren
-
Die Zertifikatsdatei auswählen
-
Zertifikatspeicher auswählen
Wenn alles geklappt hat, ist unser Root-CA Zertifikat in der Liste zu sehen
Nun ist das Zertifikat im System installiert und wird z.B. vom Browser als gültiges Root-CA Zertifikat akzeptiert. Über das gleiche Menü lässt sich das Zertifikat auch wieder deinstallieren.
Siehe:
- https://docs.openssl.org/master/man1/openssl-req/
- https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/
Root-CA Zertifikat verwenden
Im nächsten Post zeige ich, wie man mit dem eigenen Root-CA Zertifikat weitere Zertifikate signieren kann.