thecrey
Goto Top

Zertifikat - Fragestellung-Problemstellung - Falsches Gültigkeitsdatum

Hallo zusammen,

ich hoffe, es geht euch gut. Leider fehlt mir das notwendige Wissen über Zertifikate, um das vorliegende Problem eigenständig zu lösen. Auch bin ich unsicher, wo oder wie ich anfangen soll.

Das System habe ich in diesem Zustand übernommen, was es für mich schwierig macht, die Zusammenhänge nachzuvollziehen. Ich versuche, die aktuelle Situation zu beschreiben:
Ein Script überprüft in regelmäßigen Abständen, ob ein neues Zertifikat erstellt werden muss, und erstellt dieses bei Bedarf. Dies erfolgt über einen Certbot Docker, der wiederum ein LetsEncrypt-Zertifikat erstellt oder erneuert. Falls eine Erneuerung nicht notwendig ist, wird dies entsprechend gemeldet; andernfalls wird das Zertifikat auf einen Share kopiert.

Das Zertifikat gilt für *.domain.org. Es wird beispielsweise im Exchange hinterlegt und bleibt gültig bis zum nächsten Ablauf oder der nächsten Aktualisierung.

Auch bei anderen Diensten wird dieses Zertifikat hinterlegt (z.B. Syspass, Meshcentral). Sowohl Syspass als auch Meshcentral sind Docker Container auf derselben VM wie der Certbot. Ich habe noch nicht herausgefunden, wie genau Syspass und Meshcentral das neue Zertifikat erhalten, aber nach der Aktualisierung wird das neue Gültigkeitsdatum angezeigt.

Auf dem Share werden vier Dateien angelegt bzw. aktualisiert:
- domain.cer
- domain.key
- fullchain.pem
- privkey.pem

Bisher funktioniert alles einwandfrei.

Nun habe ich eine neue Nextcloud-VM aufgesetzt und wollte auch hier das *.domain.org Zertifikat verwenden. Daher kopierte ich die Dateien domain.cer und domain.key in den Apache2-Ordner, bzw. regle dies über ein einfaches Skript, das die Dateien vom Share holt. Die Nextcloud-Konfiguration wurde entsprechend angepasst.

Das Zertifikat wird im Browser als ungültig angezeigt, da es als abgelaufen gilt. Die Zertifikatsdaten stimmen, bis auf das Ablaufdatum: Es ist am 17.12.2023 abgelaufen, sollte aber, wie z.B. bei Syspass, vom 18.12.2023 bis 17.03.2024 gültig sein. Ich verstehe nicht, warum das neue Gültigkeitsdatum nicht übernommen wird, da es sich um dieselben Dateien handelt.

Das Änderungsdatum der oben genannten Dateien ist der 18.12.2023, was darauf hindeutet, dass es die richtigen Dateien sind.

An dieser Stelle komme ich nicht weiter. Ich weiß nicht, wo ich ansetzen soll, um zu verstehen, warum die neue Gültigkeit nicht übernommen wird. Warum funktioniert es bei den anderen Diensten?

Ich wäre für jeden Tipp und jede Idee, in welche Richtung ich suchen könnte, sehr dankbar.

Ich weiß, dass die Situation etwas verworren ist und alles andere als optimal, aber so habe ich das System übernommen, und so funktioniert es derzeit. Eine Dokumentation ist kaum vorhanden, weshalb ich mich von hinten nach vorne durcharbeiten muss, und das mit gefährlichem halbissen in einem Live-System. Ich versuche jedoch, das System langsam zu verstehen und zu korrigieren, ohne das Live-System zu gefährden.

Vielen Dank.

Content-ID: 93410553202

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

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

DerMaddin
DerMaddin 18.01.2024 um 09:01:04 Uhr
Goto Top
Moin,

was für ein Zertifikatspfad steht in der Apache2 Conf drin? In der Regel ist der Pfad sowas wie /etc/ssl/...
TheCrey
TheCrey 18.01.2024 um 09:14:28 Uhr
Goto Top
Hi,

die Dateien liegen in /etc/apache2
Habe aber auch die nextcloud.conf unter /etc/apache2/sites-available/ angepasst

wie folgt:

# VirtualHost für HTTP (Port 80)
<VirtualHost *:80>
    ServerName *.*.*.*
    Redirect permanent / https://*.*.*.*/
</VirtualHost>

# VirtualHost für HTTPS (Port 443)
<VirtualHost *:443>
    ServerName 000.000.000.000

    <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"  
    </IfModule>

    DocumentRoot /var/www/html/nextcloud


    SSLEngine on
    SSLCertificateFile /etc/apache2/domain.cer
    SSLCertificateKeyFile /etc/apache2/domain.key

    <Directory /var/www/html/nextcloud/>
        Require all granted
        Options FollowSymlinks MultiViews
        AllowOverride All
    </Directory>

    ErrorLog /var/log/apache2/yourdomain.com.error_log
    CustomLog /var/log/apache2/yourdomain.com.access_log common
10138557388
10138557388 18.01.2024 aktualisiert um 10:22:18 Uhr
Goto Top
Ich verstehe nicht, warum das neue Gültigkeitsdatum nicht übernommen wird, da es sich um dieselben Dateien handelt.
Meine Glaskugel bei den wenigen sichhaltigen Informationen sagt, das erneuern hat nicht geklappt und du hast mit deinem Skript die alten Zertifikatsdateien rüber kopiert oder die existierenden am Ziel nicht überschrieben ...
Das Cert-File sollte auch best practice die CAs enthalten deswegen würde ich die "fullchain.pem" bevorzugt nutzen.

PJ.
DerMaddin
DerMaddin 18.01.2024 um 10:04:11 Uhr
Goto Top
Vergleiche den SHA-Fingerprint des neuen und des abgelaufenen Zertifikats (.CER). Das dürfte dann unterschiedlich sein.
C.R.S.
C.R.S. 18.01.2024 um 10:09:49 Uhr
Goto Top
Ggf. wurde Apache einfach nicht neu gestartet. Die Datei-Struktur ist auch unübersichtlich, da sie nicht zur Konfiguration passt.
Das handelt man heute mit zwei Dateien ab: Eine PEM-Kette (Endinstanz oben, ohne Root-CA) und dem Schlüssel. Wenn die Dateinamen wörtlich gemeint sind, lieferst du derzeit keine Kette aus.

Grüße
Richard
TheCrey
TheCrey 18.01.2024 aktualisiert um 10:48:07 Uhr
Goto Top
Das erneuern muss ja (nach meiner Auffassungsgabe) geklappt haben, da es auf den anderen VM ja Funktioniert und mir das neue Datum angezeigt wird.

Die Dateiname sind nicht wörtlich sondern nur abgeändert, zum einfacheren Verständnis aber das Zertifikat läuft auf *.firma.org also inkludiert alle subdomains woraus es am ende ja mit nextcloud.firma.org rausläuft.

Der Apache wurde neugestartet und er kennt das Zertifikat ja, akzeptiert es auch, "nur" halt abgelaufen.
(Die Ganze VM natürlich auch)

Einfach Sinnfrei alle vier Dateien Kopieren bringt nichts, das mag der Apache nicht.
Der Fingerprint ist ebenfalls unterschiedlich, und da nur die Dateien in dem Ordner sind diese auch Kopiert worden, anderen Dateien gab es auf dem VM nicht, da diese Frisch ist, sodass ich ausschliessen kann, das alte verwenden werden.


Ich glaube das mit der Kette ist vielleicht der richtige Weg(?) muss ich dann die PEM ebenfalls Rüberkopieren und das in o.g. Config anpassen ?
Wenn ja, wie ist den da der Eintrag?
Einfach die pem datei als cer nehmen?
10138557388
10138557388 18.01.2024 aktualisiert um 11:02:17 Uhr
Goto Top
Nimm die fullchain.pem als Zertifikat da ist die ganze Kette für die Auslieferung durch den Browser untereinander enthalten. Die Extension spielt keine Rolle, in beiden ist/sind das/die Zertifikat(e) i.d.R. nach RFC7468 enthalten, kannst du ja einfach mit Texteditor öffnen und nachschauen.

Und nur nach dem Dateidatum zu gehen ist "shit"!
Sowas prüft man auf der Konsole im Zertifikat selbst mittels openssl
openssl x509 -in fullchain.pem -enddate -noout
commodity
commodity 18.01.2024 um 13:06:29 Uhr
Goto Top
Der Vorschlag von @10138557388 ist IMO korrekt. Meine Apaches greifen durchweg auf die fullchain.pem zu.

SSLCertificateFile /etc/letsencrypt/live/nextcloud.xyz.de/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nextcloud.xyz.de/privkey.pem

Und ein Zertifikat mit der Endung .cer habe ich gar nicht im Ordner /etc/letsencrypt/live/xyz.de
README  cert.pem  chain.pem  fullchain.pem  privkey.pem
Mag aber bei anderen Installationen anders sein.

Viele Grüße, commodity
TheCrey
TheCrey 19.01.2024 um 12:01:39 Uhr
Goto Top
Hallo,

vielen Dank für die Hilfe.
Habe jetzt folgendes gemacht, was leider nicht die Lösung gebracht hat.

openssl x509 -in fullchain.pem -enddate -noout

Bringt das erwartete Ergebnis, abgelaufen am 17.12.2023

Die Dateien auszutauschen und nur fullchain.pem und privkey.pem zu nutzen (habe die config auch angepasst) klappt leider auch nicht.

Bin da gerade noch etwas Ratlos....
10138557388
10138557388 19.01.2024 aktualisiert um 12:07:22 Uhr
Goto Top
Zitat von @TheCrey:
Bringt das erwartete Ergebnis, abgelaufen am 17.12.2023
Ergo wurde das Zertifikat in der Datei nicht aktualisiert! D.h. du musst schauen warum deine Certbot-Instanz das Zertifikat nicht erneuert hat! Der Fehler liegt also schon an der Quelle (evt. mountpoint mit dem Container nicht synchron), schau in die Logs!.
commodity
commodity 19.01.2024 um 21:48:24 Uhr
Goto Top
Bin da gerade noch etwas Ratlos....
Na, das Ergebnis zeigt doch klar, was Sache ist. Das ist ein veraltetes Zertifikat. Du musst das Richtige suchen.
Ein Script überprüft in regelmäßigen Abständen, ob ein neues Zertifikat erstellt werden muss ...
Ich würde mal das Script untersuchen, wo die neuen Zertifikate konkret abgelegt werden. Auch kannst Du mal die Instanzen untersuchen, wo das Zertifikat aktuell ist, ob Du das dort findest.

Ist immer ätzend, wenn der Vorgänger nichts dokumentiert hat. Leider ein häufiger Fall. face-sad

Viele Grüße, commodity
TheCrey
TheCrey 23.01.2024 um 08:03:38 Uhr
Goto Top
Hallo,

vielen Dank für die vielen Antworten.
Mittlerweile bin ich ein schritt weiter, der mir zwar nicht nicht ganz hilft aber etwas.
Es scheint hier im Unternehmen zwei *.domain.org Zertifikate zu geben.
Eines ist bis Mai 2024 noch gültig.

Interessant ist halt nur, das am 18.12 nichts mehr ging, ich das Script per Hand angestoßen habe, das es über den cronjob nicht lief, und danach alle Zertifikate wieder in Ordnung waren (eben bis zum 17.03.2024)

Habe nun festgestellt das es verschiede Austeller sind (LetsEncryp/Digicert).

Da es ja, leider keine Dokumentation gibt und generell alles etwas undurchsichtig ist, werd ich mir jetzt erstmal weiter einen Überblick verschaffen müssen woher welches Zertifikat kommt und wer es nun verteilt.

Der Certbot läuft, aktuell sagt er auch, das kein neues Zertifikat notwendig ist. Das dürfte das LetsEncryp Zertifikat sein.

Das Digicert ist eins von Ionos, da dort das Enddatum passt und der Fingerprint passt
Ob das aber geholt wird oder sonst wie kann ich aktuell noch nicht sagen.

Ich werden mich jetzt erstmal auf das Certbot Skript konzentrieren, dass dies als erstes abläuft.
Das scheint mir noch etwas Konfus zu sein, da sich dies anscheinend auch auf Ionos konzentriert, daher versteh ich noch nicht woher das Letsencrypt Zertifikat kommt.
Es scheint hier also mal einen Wechsel gegeben zu haben der nicht sauber durchgeführt wurde.

Das wird noch ein Spass.
Danker erstmal bis hierhin für eure Hilfe !
Werd aber sicher erstmal vor der eigenen Tür aufräumen müssen und zu verstehen was wie wo ist.