PKI-Lab mit Root-CA und Teilnehmer-CA
PKI mit Root-CA und Sub-CA (Beispiel it213)
In diesem Beispiel wird eine einfache PKI aufgebaut. Der Trainer betreibt eine Root-CA. Die Teilnehmer erzeugen eine Sub-CA, die von der Root-CA signiert wird. Mit dieser Sub-CA werden anschließend Server-Zertifikate signiert.
Root-CA erstellen
Die Root-CA ist der Vertrauensanker der PKI und ist selbstsigniert.
- openssl req -new -x509 -newkey rsa:4096 -nodes -keyout ca.key -out ca.crt -days 3650 -subj "/CN=Kit Root CA"
Das Zertifikat kann anschließend kontrolliert werden.
- openssl x509 -in ca.crt -text -noout
Root-CA auf Clients installieren
Damit Clients den Zertifikaten vertrauen, muss die Root-CA im Trust-Store installiert werden.
Debian
- cp ca.crt /usr/local/share/ca-certificates/
Das Root-Zertifikat wird in den lokalen CA-Speicher kopiert.
- update-ca-certificates
Der Trust-Store wird aktualisiert.
Rocky / RHEL
- cp ca.crt /etc/pki/ca-trust/source/anchors/
Das Root-Zertifikat wird in den Anchor-Store kopiert.
- update-ca-trust extract
Der System Trust Store wird neu erzeugt.
Sub-CA Request erzeugen (Beispiel it213)
Der Teilnehmer erzeugt einen privaten Schlüssel und eine Certificate Signing Request für seine CA.
- openssl req -new -newkey rsa:4096 -nodes -keyout it213-ca.key -out it213-ca.csr -subj "/CN=it213 Lab CA"
Sub-CA durch Root signieren
Die Root-CA signiert die Teilnehmer-CA. Dadurch entsteht die Zertifikatskette.
- openssl x509 -req -in it213-ca.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out it213-ca.crt -days 365
Das signierte CA-Zertifikat kann kontrolliert werden.
- openssl x509 -in it213-ca.crt -text -noout
Hinweis zum privaten Schlüssel
Der private Schlüssel der CA wird nur zum Signieren von Zertifikaten benötigt. Zum Prüfen der Zertifikatskette werden nur die öffentlichen Zertifikate verwendet.
Beispiel:
web.crt it213-ca.crt ca.crt
Die Prüfung erfolgt über die Signaturen der Zertifikate.
Server-Schlüssel und CSR erzeugen
Der Teilnehmer erzeugt einen Schlüssel und eine CSR für seinen Server.
- openssl req -new -newkey rsa:2048 -nodes -keyout web.key -out web.csr -subj "/CN=web.it213.lab"
Server-Zertifikat signieren
Die Sub-CA signiert das Server-Zertifikat.
- openssl x509 -req -in web.csr -CA it213-ca.crt -CAkey it213-ca.key -CAcreateserial -out web.crt -days 365
Das Server-Zertifikat kann kontrolliert werden.
- openssl x509 -in web.crt -text -noout
Fullchain erstellen
Damit Clients die Zertifikatskette aufbauen können, muss der Server die Intermediate-CA mitliefern.
Dazu wird eine Fullchain-Datei erstellt.
- cat web.crt it213-ca.crt > fullchain.pem
Die Reihenfolge ist wichtig:
web.crt it213-ca.crt
Zertifikatskette prüfen
Die komplette Zertifikatskette kann mit OpenSSL überprüft werden.
- openssl verify -CAfile ca.crt -untrusted it213-ca.crt web.crt
PKI-Struktur
Kit Root CA
└── it213-ca
└── web.it213.lab
Der Client kennt die Root-CA aus dem Trust-Store. Der Server liefert beim TLS-Handshake das Server-Zertifikat und die Sub-CA. Der Client kann damit die vollständige Zertifikatskette prüfen.