Problem mit openssl / trusted chain

Started by white_rabbit, February 20, 2020, 11:54:52 AM

Previous topic - Next topic
Hallo.
Ich habe unsere OPNSense-Firewall so eingerichtet, dass sie über das LE-Plugin Let's Encrypt Zertifikate holt und erneuert. Nun brauchte ich dieses Zertifikat nicht nur auf der FW sondern auch lokal auf einem Server. Daher habe ich alle Dateien unter
Quote"/var/etc/acme-client/home/"
heruntergeladen und lokal verwendet.
Wenn ich nun echo -n | openssl s_client -connect server:443 verwende, erhalte ich


CONNECTED(00000005)
depth=0 CN = server.meine-domain.de
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = server.meine-domain.de
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = server.meine-domain.de
   i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
---

Und ganz unten dann nochmals:

Verify return code: 21 (unable to verify the first certificate)


Wenn ich das gleiche auf der Firewall selbst ausführe, ist die Zertifikatskette vollständig. Dort erhalte ich dann die richtige Ausgabe:

---
Certificate chain
0 s:CN = firewall.meine-domain.de
   i:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
1 s:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
   i:O = Digital Signature Trust Co., CN = DST Root CA X3
---


Die Frage ist: Warum? Was fehlt da bzw was ist falsch konfiguriert?
Am HAProxy liegt es offenbar nicht, denn wenn der Service ausgeschaltet ist, erscheinen die gleichen Meldungen.
Danke für eine gute Idee!


Hast Du die root certificate auf dem Server installiert?

Und wenn es ein Intermediate dazwischen hast kommt das meist vorher

Server:
Server

Local trust:
intermediate
root

Am besten mal das cer anschauen in text editor.
A
English: Never try, never know!
Deutsch: Unversucht ist Unerfahren!

February 20, 2020, 12:16:39 PM #2 Last Edit: February 20, 2020, 02:40:43 PM by white_rabbit
Das root-cert ist doch per default installiert, oder??
DST Root CA X3 ist vorhanden.

DST_Root_CA_X3.pem -> /usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt


Quote
Am besten mal das cer anschauen in text editor.
Wie meinst du das -- bzw was dann?

Ich kenne lets encrypt nicht.

Wir hatte nur immer Probleme wenn Intermediates dazwischen waren.
Da hat das intermediate oft gesponnen wegen der Reihenfolge.
English: Never try, never know!
Deutsch: Unversucht ist Unerfahren!

February 20, 2020, 04:25:48 PM #4 Last Edit: February 20, 2020, 04:42:26 PM by white_rabbit
Aber hier sieht doch alles danach aus, als sei das Gegenteil der Fall: die Kette ist zu kurz. Normalerweise sollte sie so aussehen wie im Fall der firewall oben -- also über 3 Zertifikate gehen

> "/var/etc/acme-client/home/"
> heruntergeladen und lokal verwendet.

Und welche Dateien hast du da erhalten? Ich vermute das Stammzertifikat (CA) von ACME/LetsEncrypt ist da nicht mit drin oder das Intermediate fehlt?
"It doesn't work!" is no valid error description! - Don't forget to [applaud] those offering time & brainpower to help you!
Better have some *sense as no(n)sense! ;)

If you're interested in german-speaking business support, feel free to reach out via PM.

Diese Dateien sind in dem Ordner enthalten:


-rwxr-x---  1 root  wheel  1648 Jan 29 10:08 ca.cer*
-rwxr-x---  1 root  wheel  3933 Jan 29 10:08 fullchain.cer*
-rwxr-x---  1 root  wheel  2285 Jan 29 10:08 server.meine-domain.de.cer*
-rwxr-x---  1 root  wheel   958 Jan 29 10:08 server.meine-domain.de.conf*
-rwxr-x---  1 root  wheel  1700 Jan 29 10:08 server.meine-domain.de.csr*
-rwxr-x---  1 root  wheel   220 Jan 29 10:08 server.meine-domain.de.conf*
-rwxr-x---  1 root  wheel  3243 Nov 21 11:32 server.meine-domain.de.key*


Davon habe ich alles außer *.conf auf den Server gepackt.
Das root-Cert ist doch *immer* vorhanden. Es fehlt wahrscheinlich eher das intermediate von LE? Aber ich dachte, dass das mit in der fullchain steckt?

Full chain sollte am Webserver verwendet werden, da ist das Zertifikat und alle intermediate Zertifikate drin. Verwende ich selbst mit nginx ohne Probleme.

Also wenn ich folgendes auf einem Client mache, klappt es:

Unter /usr/local/share/ca-certificates einen Link auf  das heruntergeladene cacert.crt und anschließend
update-ca-certificates
(Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.)

Danach:
openssl s_client  -connect server:443
und siehe da:

Verify return code: 0 (ok)

... aber ist das die richtige Vorgehensweise? Ich dachte, dass das intermediate-cert auch vom Server heruntergeladen wird und dann die Kette als gültig angesehen wird??


Nur wenn das intermediate von einer CA in deinem Store signiert ist.

February 20, 2020, 07:05:17 PM #10 Last Edit: February 20, 2020, 10:35:12 PM by white_rabbit
moment -- verstehe ich jetzt nicht, aber vielleicht reden wir auch aneinander vorbei:

Der Aufbau der Zertifikatskette ist hier dieser:
1.) Root-cert  DST Root CA X3
2.) Let's Encrypt Authority X3
3.) Eigenes Cert (von LE erstellt)

Nummer 2 ist für meine Begriffe das intermediate-cert, das sich hinter cacert.pem verbirgt.
Das root-Cert ist ebenfalls vorhanden -- und zwar per default unter /etc/ssl/certs/

Sollte es nicht so sein, dass AUCH das cacert (also Nr2) vom Server heruntergeladen wird, wenn mit openssl die Verbindung auf Port 443 aufgemacht wird?


Ja, dein Server sollte die ganze Chain ausliefern.

Ja -- soweit die Theorie. Was könnte der Grund sein, dass er das nicht macht?

February 21, 2020, 05:32:44 PM #13 Last Edit: February 21, 2020, 06:07:02 PM by white_rabbit
Ich habe den Verdacht, dass ich die auf der OPNSense-FW durch das LE-Plugin erzeugten Dateien unter

/var/etc/acme-client/home/server.meine-domain.de

nicht problemlos weiter verwenden kann? So ist z.B. in der Datei "fullchain.cer" eine Leerzeile, die da IMHO nicht stehen darf?
Wenn ich diese Dateien auf den Host, für den sie erstellt wurden, kopiere und dort anschließend einen check mit openssl mache, erhalte ich jedenfalls die o.g. Fehlermeldungen. Die Chain ist unterbrochen/nicht vollständig.

Kann das jemand bestätigen?


Wie gesagt, ich lade diese Datei auf fabian-franz.eu - daher weiß ich dass die geht.