kaineanung
Goto Top

PKI mit OpenSSL - Vertrauen zum RootCA auf dem Intermediate-CA herstellen?

Hallo Leute,

ich möchte eine PKI in unserer Firma aufbauen und mir schwebt vor dies mit 2 Ubuntu-Servern und OpenSSL zu realisieren.
Ich habe auch bereits erste Versuche in meiner Testumgebung versucht und ein SelfSigned-Zertifikat auf dem RootCA erstellt und ein Intermediate-CA auf dem zweiten Server welches ich auf dem RootCA signiert habe (Standard-Vorgang bei einer PKI).

Ich habe eine Anleitung als auch ChatGPT befolgt und am Ende ein IIS-Zertifikat auf dem Intermediate-CA erstellt bzw. Signiert welches leider nicht geklappt hat (Browser meldet nicht vertrauenswürdige Webseite).

Auf dem Windows-11-Client:
Das CRT des root-CA wurde in 'vertrauenswürdige Stammzertifizierungsstellen' und das Intermediate-CA in den 'vertrauenswürdigen Zwischenzertifizierungsstellen' gespeichert.

Auf dem IIS-Server:
Ebenfalls in beide Zertifizierungsstellen jeweils das entsprechende PEM (als CRT-Datei) 'installiert' wie beim Windows-11-Client. Zusätzlich natürlich das signierte Server-Zertifikat auf die Default-Site 'gebunden'.

Ich habe mich mal mit der Windows-PKI befasst und dort hat das alles geklappt, mit der Ubuntu-PKI klappt das irgendwie nicht. Um Browser-Eigenarten erstmal beiseite zu legen (Firefox, Chrome und ähnliche benötigen die erweiterte Angaben und nutzen ihren eigenen Zertifikatsspeicher) habe ich die Tests mit Edge und IE gemacht.

Was mir bei all den Anleitungen und dem Vorgang mit ChatGPT aufgefallen ist:
Irgendwie fehlt mir die Vertrauensstellung zwischen RootCA und Intermediate-CA.
Ich übertrage zwar die Zertifizierungsanfrage des Intermediate-CA an den Root-CA und signiere es dort um anschliessend die CRT zurück zu transferieren um dort den Intermediate-CA damit auszustatten, aber ich sehe nirgends den Vorgang das der Root-CA auf dem Intermediate-CA bekannt gemacht wird und das diesem auch getraut werden soll?

Daher nun die Frage:
hat mir jemand eine korrekte Vorgehensweise / Anleitung parat die alles bis ins Detail 'abdeckt'?
Der Intermediate-CA muss doch auch die CRT vom RootCA besitzen und der muss doch auch irgendwie vertraut werden, richtig?


Hier ist das was ich mache:
Auf dem Root-CA:
  • openssl req -new -x509 -days 3650 -keyout /etc/ssl/private/root-ca.key -out /etc/ssl/certs/root-ca.crt
Auf dem Intermediate-CA:
  • openssl req -new -keyout /etc/ssl/private/intermediate-ca.key -out /etc/ssl/certs/intermediate-ca.csr
  • 'intermediate-ca.csr' auf den Root-CA per SCP übertragen
Auf dem Root-CA:
  • openssl x509 -req -days 3650 -in /pfad/auf/root-ca-server/intermediate-ca.csr -CA /etc/ssl/certs/root-ca.crt -CAkey /etc/ssl/private/root-ca.key -CAcreateserial -out /pfad/auf/root-ca-server/intermediate-ca.crt
(Pfade wurden natürlich entsprechnd angepasst)
  • 'intermediate-ca.crt' auf den Intermediate-CA per SCP übertragen und in /etc/ssl/certs speichern

Und hier komme ich ins grübeln: wieso sollte, laut Anleitung jedoch korrekte vorgehensqweise, der Intermediate-CA dem intermediate-ca.crt vertrauen? Der weiß doch gar nicht das dem RootCA vertraut werden kann? Ausserdem weiß ich nicht ob das einfache Ablegen der CRT in /etc/ssl/certs ausreicht um das Zertifikat 'installiert' zu haben?

Am Ende müssen dann die RootCA.crt und die IntermediateCA.crt auf den Clients und dem Server in die entsprechenden Zertifikatsspeicher (wie Eingangs beschrieben) abgleegt ('installiert') werden und dann sollte das ja klappen. Klappt jedoch nicht und einer meiner möglichen Fehlerursachen sind eben diese Vertrauensstellung zwischen Root-CA und Intermediate-CA.

Ich hoffe auch eure Hilfe. Eine korrekte Anleitung oder auch Erklärungen zum Vorgang wird mir sicherlich immens helfen.

Schon einmal im voraus vielen Dank für eure Mühe und sei es nur für das Lesen meines Beitrages bis hierher.

Content-ID: 21962156327

Url: https://administrator.de/contentid/21962156327

Ausgedruckt am: 13.11.2024 um 10:11 Uhr

aqui
aqui 08.11.2023 aktualisiert um 09:39:58 Uhr
Goto Top
Ggf. ist XCA etwas für dich bzw. deine Anforderung.
https://hohnstaedt.de/xca/
Es ist in allen Repositories enthalten auch bei Ubuntu (apt-cache search xca)
Gibt es u.a. auch in einer Portabel Version für die CA am Schlüsselbund (USB Stick). face-wink
Siehe zu der Thematik auch hier.
Klappt aber natürlich auch mit OpenSSL in der Regel immer problemlos.
https://www.baeldung.com/openssl-self-signed-cert
C.R.S.
C.R.S. 08.11.2023 um 10:38:14 Uhr
Goto Top
Hallo,

die Intermediate-CA führt in dieser Rolle keine Aktion aus, die Vertrauen in die Root-CA erfordert.

Das ist bei Windows auch nicht anders, nur erhält dort die Maschine automatisch dieses Vertrauen als Member der Domain, in die die Root-CA installiert werden muss. Du kannst auf dem Rechner der Intermediate-CA die Root-CA installieren, wie auf jedem anderen Rechner, ist aber nicht nötig.

Grüße
Richard
kaineanung
kaineanung 08.11.2023 um 10:38:53 Uhr
Goto Top
Vielen Dank aqui,

ich habe dannk deines Links wieder etwas mehr dazugelernt (Zertifikats-Formate ändern).
Ich suche aber konkret das erstellen einer RootCA und Intermediate-CA und, falls möglich, eine Erklärung der einzelnen Vorgänge. Ich kapiere immer noch nicht wo die Vertrauensstellung zwischen Root und Intermediate hergestellt wird.
kaineanung
kaineanung 08.11.2023 um 14:02:39 Uhr
Goto Top
Die Clients müssen also auch nur der Intermediate-CA vertrauen?

Also sehen meine Schritte wie folgt aus:

1. Root-CA mit selfsigned zertifikat erstellen
2. Intermediate-CA CSR erstellen und am Root-CA signieren und das CRT dann in "/etc/ssl/certs" abstellen

Ab diesem Punkt wird nur noch der Intermediate-CA benötigt.

Will ich nun ein Webserver-Zertifikat für einen IIS erstellen dann:

1. CSR am IIS erstellen
2. Am Intermediate-CA signieren
3. Zurück am IIS das CRT binden
4. Am Windows-Client im Zertifikatsspeicher "Vertrauensvolle Zwischenzertifizierungsstellen" das CRT des Intermediate-CA installieren und für den IE sollte dies dann genügen um korrekt zu funktionieren?

Wenn dies bis hierhin funktioniert, muss ich dann auf die Eigenarten der anderen Browser eingehen. Das ist aber dann das nächste Thema.

Habe ich das bis hierhin korrekt begriffen?

Also benötigt der Intermediate-CA keine 'vertrauensvolle Stammzertifizierungsstelle'?
Die weiteren Server dann ebenfalls nicht da ja der Intermediate-CA, im Speicher 'vertrauensvolle Zwischenzertifizierungsstelle' enthalten ist und somit 'zählt'? Ich benötige quasi nirgends mehr den 'vertrauensvolle Stammzertifizierungsstelle' mehr?
C.R.S.
Lösung C.R.S. 08.11.2023 um 14:42:15 Uhr
Goto Top
Zitat von @kaineanung:

Die Clients müssen also auch nur der Intermediate-CA vertrauen?

Nein, sie müssen im Allgemeinen der Root- und den Intermediate-CAs vertrauen, jedenfalls aber der Root-CA.
Wenn z.B. ein Client eine Webseite aufruft, bekommt er von einem korrekt konfigurierten Server das Webserver-Zertifkat und alle Intermediate-Zertifikate und validiert diese Kette in sich und gegen die Root-CA.

1. CSR am IIS erstellen
2. Am Intermediate-CA signieren
3. Zurück am IIS das CRT binden
4. Am Windows-Client im Zertifikatsspeicher "Vertrauensvolle Zwischenzertifizierungsstellen" das CRT des Intermediate-CA installieren und für den IE sollte dies dann genügen um korrekt zu funktionieren?

Auf den Windows-Clients spielst Du alle CAs in die passenden Speicher ein. Wenn das AD CS ersetzen soll, auch im AD (certutil -dspublish).

Also benötigt der Intermediate-CA keine 'vertrauensvolle Stammzertifizierungsstelle'?

Die Intermediate-CA nicht unbedingt, weil Du dort ja grundsätzlich keinen Web-Server aufrufst o.ä.
Sie hat ihr eigenes Zertifikat, dem sie nicht zu vertrauen braucht. Sie hat ja ihren privaten Schlüssel und kann Zertifikate signieren, denen sie auch nicht zu vertrauen braucht.

Je nach Zielsetzung würde ich den Weg korrigieren, weil Du noch recht wenig Erfahrung zu haben scheinst. Mit Tutorials zu AD CS wirst Du schneller und zuverlässiger zu einer korrekten PKI kommen. Es gibt z.B. MS-spezifische Erweiterungen, und Themen wie automatischer Abruf, CRL-Generierung, AIA/CDP sind noch gar nicht berührt.
aqui
aqui 26.11.2023 um 15:07:12 Uhr
Goto Top
Wenn es das denn nun war:
Wie kann ich einen Beitrag als gelöst markieren?
nicht vergessen!