Verständnisprobleme root CA

Hallo liebe Community,

ich verzweifel an dem korrekten ausstellen von Zertifikaten. Mittlerweile bin ich wirklich ratlos und hinterfrage mittlerweile mich selbst, ob ich das theoretisch Konzept überhaupt richtig verstanden habe - da ich irgendwo wahrscheinlich gravierende Fehler habe - deshalb würde ich mich über absolut jede Hilfestellung diesbezüglich freuen, um den Knoten im Kopf zu lösen.

Ich habe folgendes Setup:
Eine eigene Root CA.
Eine intermediate CA, signiert von Root CA.
Ein Serverzertifikat, signiert von intermediate CA.

Achtung, es könnten Fehler folgen:

Ich bin wie folgt für die Opnsense vorgegangen:
  1. Die .crt vom root CA habe ich in meinen Browser importiert, also den public Key vom root CA.
  2. Die Opnsense habe ich mit dem Serverzertifikat, signiert vom intermediate CA ausgestattet.
  3. Den Root CA habe ich extern gesichert und entfernt.
Damit funktioniert die Authentifizierung für die Opnsense problemlos, sei es mit DNS oder IP, als auch in Chromium / Firefox etc.
Auch die Erstellung neuer Serverzertifikate mit dem intermediate klappt problemlos und wird auch akzeptiert.
Hierzu habe ich folgende manual genutzt: in der offiziellen Dokumentation der Opnsense, mit der Abweichung, dass ich den root CA in den Browser importiert habe und nicht den intermediate.
Wahrscheinlich liegt auch hier irgendwo der Fehler?

Denn ich wollte das gleiche nun für mein Proxmox durchführen. Hier bekomme ich allerdings Probleme, hier ein paar meiner Lösungsversuche :
  1. Da ich eine wildcard DNS gewählt habe, habe ich erst versucht einfach das bereits bestehende Zertifikat zu nutzen, da die *.subdom.tld gleich war.
  2. Einen neuen intermediate erstellen ohne wildcard, genau zutreffend auf Domain und IP
  3. Eine komplett neue chain aufzusetzen
[...]
Beim importieren habe ich folgendes probiert, da ich die Zertifikate vorerst mit Opnsense erstellt hatte:
  1. Das Zertifikat .crt und den Key .key vom Serverzertifikat exportiert und in Proxmox unter Zertifikate eingefügt.
  2. Die .p12 vom Serverzertifikat exportiert und entpackt mittels:
    Code:
    openssl pkcs12 -in pkcs.p12 -nodes -out server.key -nocerts
    openssl pkcs12 -in pkcs.p12 -clcerts -nokeys -out server.pem
    Dann in der Proxmox root shell mittels vim server.prm und vim server.key den Inhalt per copy paste übertragen.
Ich erhalte jedoch CERT Authority invalid.
Wenn ich in die .pem Datei schaue, sind auch natürlich nur der internal-ca und das server-cert gelistet.
Folgender Test zeigt, dass es an meinem Root CA liegen muss:
  1. Wenn ich den intermediate CA in meinen Browser importiere, wird die Kette korrekt erkannt: intermediate-ca ---> Serverzertifikat
Wenn ich die Lösung aber einfach so nehme, wozu habe ich denn dann überhaupt den root CA erstellt?
Könnte dann nicht jemand, wenn der intermediate-ca kompromitiert wird, sich für den Server ausgeben?
Oder ist es das korrekte vorgehen das importieren des intermediate-ca und ich habe ein Verständnisproblem? (Ich möchte aber schon gerne eine chain)
Oder muss ich noch irgendwie das root Zertifikat, dem Server mit auf den Weg geben (und die Sense hat weitere Komplexität abstrahiert)? Irgendwie soetwas in der Richtung?

Mittlerweile habe ich mich total verrant und weiß gar nicht mehr was von meinem Vorgehen nun richtig und was falsch war. Ich weiß, dass ich mir den gesamten Ärger sparen kann und einfach ein Skript von Let's Encrypt ausführen kann und dass eine chain mit Root und Intermediate für mein kleines im Aufbau befindliches Heimnetz vielleicht etwas overkilled ist - aber ich möchte den gesamten Prozess mindestens einmal richtig verstanden und selbst umgesetzt haben (auch wenn ich vorerst die Sense zur Erstellung nutze und nicht openssl).

Vielleicht hat das jemand schon einmal erfolgreich umgesetzt? Oder kann mir den richtigen Weg zeigen, bevor ich mich noch weiter verlaufe?
Wie gesagt, über jede Form der Hilfe wäre ich sehr dankbar.

Liebe Grüße
 
Der Proxmox beschwert sich, weil er das Root-CA nicht kennt, dass das Intermediate-CA ausgestellt hat; da bricht dann die "Kette".
Du musst, wie bei Deinem Browser auch, den Public Key des Root-CA in den Cert-Store des Linux-Hosts bzw. Promox importieren.
Erst dann kann der Proxmox, der scheinbar selbst Validitätsprüfungen macht, diese erfolgreich durchführen.
 
Vielen Dank - ich habe das root ca jetzt auf proxmox installiert, was auch wunderbar geklappt hat.

Code:
/usr/local/share/ca-certificates/root.crt
dpkg-reconfigure ca-certificates

Wie es aussieht, habe ich nicht nur einen Fehler gemacht :)
Ich setze mich jetzt nochmal mit dem korrekten signing request und dem anschließenden unterzeichnen auseinander, vielleicht liegt ja da der Fehler. Beim inter-ca ist bei mir der signer unknown und wahrscheinlich bricht da die Kette.
Ich werde hier ausführlich berichten, sobald ich es hinbekommen habe :)
 
Vielen Dank @Barungar für den Schubs in die richtige Richtung - das der root-CA nicht bekannt ist. Somit hatte ich eine Richtung in die ich mich bewegen kann, mit der Sicherheit das es am Root-CA liegt.
Auch nach weiterer Untersuchung konnte ich merkwürdigerweise egal wie ich die Zertifikate aus der Opnsense exportiert habe, keinen Root in den Zertifikaten entdecken.
Eventuell habe ich etwas falsch gemacht, wenn es doch möglich ist - dann bitte korrigieren. Der intermediate war auf jeden Fall in den meisten der fast 30 Versuche vom root signiert, ebenso wie das Server Zertifikat vom intermediate signiert war.

Letztlich war die chain nicht vollständig. Da ich mich bisher mit der man von openssl auf der Kommandozeile noch nicht auseinandergesetzt habe, habe ich es letztlich mit einem frontend für openssl lösen können (xca).

Der versprochene ausführliche Bericht (für nicht lab Umgebung seperate Datenbanken für die einzelnen CAs anlegen, sonst widerspricht das irgendwo der chain):

  1. Nach der Installation ein KeyPair für den RootCA anlegen.
    1684843022253.png
  2. Ein selbstsigniertes Zertifikat für den RootCA anlegen
    1684843540829.png
  3. Bei Subject die Felder ausfüllen & bei Extensions AKI extension setzen (Authority Key Identifier) für schnelle Validierung.
    Der Rest müsste für ein Basic setup passen, da dass Apply aus Schritt zwei schon die meisten Einstellungen vorgenommen hat.
  4. Schlüsselpaar für den Intermediate CA nach dem gleichen Prinzip erstellen wie für rootCA und entsprechend bennen.
    Dann ein neues Zertifikat für den intermediate erstellen und mit dem private Key des RootCA signieren. Wieder CA Template wählen, um die CA Einstellungen automatisch setzen zu lassen. Der Rest gleich wie bei Root CA.
    1684843195248.png
  5. Rechtsklick auf den IntermediateCA und Neu erstellen.
    1684843802306.pngHier diesmal TLS Server wählen und sicherstellen das mit dem interCA signiert wird.
  6. Bei Subject wieder alles ausfüllen. Bei Extensions können noch Alternative Names angepasst werden:
    1684843955102.png
    Bei Key Useage habe ich noch zusätzlich TLS Web Client Authentication gewählt.
  7. Dann, der entscheidende Teil: Rechtsklick auf das Serverzertifikat und beim Export Format "PEM chain (*.pem)" auswählen.
  8. Root Zertifikat im .crt Format exportieren.
  9. Bei Privaten Schlüssel ebenfalls mit Rechtsklick eportieren, dieser kann im "PEM private (*.pem) Format belassen werden. Dateiname ggf. anpassen, um Verwirrung durch zwei .pem zu vermeiden.
  10. rootCA .crt im Browser oder entsprechenden OS Verzeichnis ablegen.
  11. In der Proxmox GUI: "Upload Custom Certificate": Bei private Key den privaten Schlüssel aus Punkt 9 einfügen. Bei Certificate Chain, die chain pem.
Wenn man sich das Zertifikat zwischendurch abschießt und den Zugriff zu Proxmox verliert:

Code:
cd /etc/pve/local # (bzw. local durch euren storage Namen ersetzen)
cp pveproxy-ssl.key pveproxy-ssl.key.bak
cp pveproxy-ssl.pem pveproxy-ssl.key.pem
# rein theoretisch könnte man auch rm, die pve-ssl.key/pem dürfen aber auf keinen Fall angefasst werden


Sicherlich wäre es mit openssl im Terminal weniger Bilderbuch gewesen und vielleicht hätte es auch eine simplere Lösung gegeben, dann freue ich mich über Verbesserungsvorschläge wie ich es hätte besser machen können :)
 
Im Endeffekt war das der entscheidende Teil:
1684845336767.png
(fand ich nochmal wichtig zu zeigen)

Hätte ich auch aus meiner .p12 zur chain kommen können, wenn sie über Opnsense exportiert wird? Würde mich freuen wenn jemand dazu Infos hätte :)

Lg
 

Zurzeit aktive Besucher

Letzte Anleitungen

Statistik des Forums

Themen
4.378
Beiträge
45.219
Mitglieder
3.977
Neuestes Mitglied
ciddi89
Zurück
Oben