Letsencrypt Zertifikate kopieren bei renew

For topics beyond KeyHelp. / Für Themen jenseits von KeyHelp.
Post Reply
Peter
Posts: 33
Joined: Sun 27. Mar 2022, 09:18

Letsencrypt Zertifikate kopieren bei renew

Post by Peter »

Hallo ich suche Unterstützung für folgendes Problem oder vielleicht einfach nur Ideen falls es andere Vorschläge gibt. :)
Ich habe ein Debian 11 Host auf dem Keyhelp läuft, womit ich die meine Domains verwalte und u.a. dann auch die entsprechenden Let's encrypt Zertifikate erstellt werden. Der auf dem Host installierte Apache dient auch als Reverse Proxy und im Hintergrund werkeln einige Docker Container.
Momentan ist es so das die Anfragen per SSL rein kommen und dann oftmals via ProxyPass / http://127.0.0.1:XXXX/ an den Container weitergeleitet werden. Nun möchte ich SSL aber nicht am Proxy terminieren lassen sondern das direkt per SSL an den Container weiterleiten.

Das klappt prinzipiell auch, allerdings suche ich nach einer Lösung wie man das mit den vorhandenen Letsencrypt Zertifikaten bewerkstelligen kann.
Prinzipiell ist es so das ich im Docker Container lokale Pfade mappe in denen dann die entsprechenden Zertifikate liegen. Das ist allerdings auch zugleich das Problem, ich kann nicht den Originalpfad verwenden in denen Keyhelp die Dateien abgelegt (/etc/ssl/keyhelp/letsencrypt/<user>/<domain> denn dann müsste ich den Container als root oder entsprechder <user> laufen lassen damit der Zugriff funktioniert.

Temporär habe ich nun also die Zertifikate aus /etc/ssl/keyhelp/letsencrypt/<user>/<domain> ins entsprechenden Dockerverzeichnis kopiert auf dem dieser Container ohnehin Zugriff hat. Das klappt auch soweit, allerdings nur solange bis die Zertifikate erneuert werden. Und genau dafür suche ich nun nach einer praktikablen Lösung, d.h. ein Script welches die Zertifikate kopiert sobald sie erneuert wurden und ggf. dann auch gleich den Docker Container neu startet. Vielleicht gibt es ja jemanden hier der auch schon vor diesem Problem stand oder ggf. andere Ideen hat wie man es sonst noch lösen könnte.

Gruß
Peter
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Jolinar »

Einfach ein kleines Shellscript erstellen, welches zB. mit diff das originale mit dem kopierten Zertifikat vergleicht und bei Ungleichheit das neue originale Zertifikat kopiert.
Das ganze als Cronjob einrichten und minütlich starten.
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
Tobi
Community Moderator
Posts: 2812
Joined: Thu 5. Jan 2017, 13:24

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Tobi »

Minutlich ist der absolute Overkill.
Die Zertifikate werden, nach Standardeinstellung, nachts zwischen 0 und 1 Uhr erneuert.

Es würde also reichen einmal täglich um 5 nach 1 die timestamps der Zertifikate zu checken und ggf. umzukopieren + Neustart Docker.

Ein solches Script habe ich leider nicht, es können aber kaum mehr als 20 Zeilen Code sein ;)
Gruß,
Tobi


-----------------------------
wewoco.de
Das Forum für Reseller, Digital-Agenturen, Bildschirmarbeiter und Mäuseschubser
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Jolinar »

Tobi wrote: Wed 27. Apr 2022, 09:38 Minutlich ist der absolute Overkill.
Ich wollte damit auch nur den Fall sicherstellen, daß jemand an den Einstellungen für die Zertifikatserneuerung rumstellt.

BTW:
Der reine Vergleich der Zertifikate kratzt nicht mal an der verfügbaren Prozessorleistung heutiger Systeme, geschweige denn, daß er tatsächlich Last erzeugt. ;)
Aber du hast natürlich recht, wenn man solche Basstellösungen einsetzt, soll man sie natürlich an die individuellen Gegebenheiten anpassen. :mrgreen:
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
Alexander
Keyweb AG
Posts: 3810
Joined: Wed 20. Jan 2016, 02:23

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Alexander »

Er kann etwaiges Script ja auch einfach nur alle 2 Minuten laufen lassen und statt diff nur aufs Änderungsdatum der Datei schauen. Dann sollte er nochmal ein paar Mikrosekunden sparen ;)
Mit freundlichen Grüßen / Best regards
Alexander Mahr

**************************************************************
Keyweb AG - Die Hosting Marke
Neuwerkstr. 45/46, 99084 Erfurt / Germany
http://www.keyweb.de - http://www.keyhelp.de
**************************************************************
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Jolinar »

Alexander wrote: Wed 27. Apr 2022, 09:48 Er kann etwaiges Script ja auch einfach nur alle 2 Minuten laufen lassen und statt diff nur aufs Änderungsdatum der Datei schauen. Dann sollte er nochmal ein paar Mikrosekunden sparen ;)
Natürlich kann man die Optimierung noch weiter treiben. :D
Ich hab es damals so gelernt: Vergleiche Dateien immer nach Inhalt, niemals nur nach Dateiattributen. 8-)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
Peter
Posts: 33
Joined: Sun 27. Mar 2022, 09:18

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Peter »

Ich hätte folgendes Beispiel, das würde als Script dann kurz nach dem Keyhelp "Wartung von SSL/TLS-Zertifikaten" Job laufen und überprüft ob sich im angegebenen Verzeichnis Dateien in den letzten 15min geändert haben.

Code: Select all

#!/bin/bash
result=$(find /etc/ssl/keyhelp/letsencrypt/user/domain.de/ -type f -mmin -15)
if [ -n "$result" ]; then
cp /etc/ssl/keyhelp/letsencrypt/user/domain.de/private.pem /mnt/docker/<container>/certs/private.pem
cp /etc/ssl/keyhelp/letsencrypt/user/domain.de/fullchain.pem /mnt/docker/<container>/certs/fullchain.pem
/usr/bin/docker restart <container>
fi
exit 0
Passt die Logik so oder könnte man da noch was vereinfachen / verbessern?
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Jolinar »

Peter wrote: Wed 27. Apr 2022, 10:25 Passt die Logik so
Sieht gut aus...und macht genau das, was du willst. :mrgreen:

Edit:
Peter wrote: Wed 27. Apr 2022, 10:25 könnte man da noch was vereinfachen / verbessern?
Wenn du das flexibler gestalten willst (zB. verschiedene Domains und zugehörige Container), könntest du noch ein Parameterfile mit Zertifikatspfad und Namen des Containers, der restartet werden soll, anlegen. Das File dann über das Script einlesen und in einer Schleife die einzelnen Prüfungen und Restarts unterbringen. So brauchst du dann nicht jedesmal das Script anpassen, du mußt nur noch das Parameterfile verwalten. ;)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by 24unix »

Peter wrote: Wed 27. Apr 2022, 10:25 Passt die Logik so oder könnte man da noch was vereinfachen / verbessern?
Technisch schaut das gut aus.

Wenn Du mehr als eine Domain/Container hast, würde ich es so erweitern:

Code: Select all

#!/bin/bash

if [ $# != 2 ];
then
	echo "Usage: $0 <domain> <container>"
	exit 1;
fi

domain=$1
container=$2

result=$(find /etc/ssl/keyhelp/letsencrypt/user/$domain/ -type f -mmin -15)
if [ -n "$result" ]; then
	cp /etc/ssl/keyhelp/letsencrypt/user/$domain/private.pem /mnt/docker/$container/certs/private.pem
	cp /etc/ssl/keyhelp/letsencrypt/user/$domain/fullchain.pem /mnt/docker/$container/certs/fullchain.pem
	/usr/bin/docker restart $container
fi
exit 0

Edit: OK der Ansatz von Jolinar ist auch nicht schlecht, musst Du gucken, was für Dich einfacher umzusetzen ist, mehre Aufrufe, oder eine Config parsen und drüber laufen.
mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
Peter
Posts: 33
Joined: Sun 27. Mar 2022, 09:18

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Peter »

24unix wrote: Wed 27. Apr 2022, 10:44
Peter wrote: Wed 27. Apr 2022, 10:25 Passt die Logik so oder könnte man da noch was vereinfachen / verbessern?
Technisch schaut das gut aus.

Wenn Du mehr als eine Domain/Container hast, würde ich es so erweitern:

Code: Select all

#!/bin/bash

if [ $# != 2 ];
then
	echo "Usage: $0 <domain> <container>"
	exit 1;
fi

domain=$1
container=$2

result=$(find /etc/ssl/keyhelp/letsencrypt/user/$domain/ -type f -mmin -15)
if [ -n "$result" ]; then
	cp /etc/ssl/keyhelp/letsencrypt/user/$domain/private.pem /mnt/docker/$container/certs/private.pem
	cp /etc/ssl/keyhelp/letsencrypt/user/$domain/fullchain.pem /mnt/docker/$container/certs/fullchain.pem
	/usr/bin/docker restart $container
fi
exit 0

Edit: OK der Ansatz von Jolinar ist auch nicht schlecht, musst Du gucken, was für Dich einfacher umzusetzen ist, mehre Aufrufe, oder eine Config parsen und drüber laufen.
Danke, ich denke in einem Script würde reichen. Es sind unterschiedliche Domains aber auch unterschiedliche Benutzer, es müsste also auch $user noch verwendet werden.
User avatar
24unix
Posts: 1560
Joined: Sun 21. Jun 2020, 17:16
Location: Kollmar
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by 24unix »

Peter wrote: Wed 27. Apr 2022, 11:03 Danke, ich denke in einem Script würde reichen. Es sind unterschiedliche Domains aber auch unterschiedliche Benutzer, es müsste also auch $user noch verwendet werden.

Dann so:

Code: Select all

#!/bin/bash

if [ $# != 3 ];
then
	echo "Usage: $0 <user> <domain> <container>"
	exit 1;
fi

user=$1
domain=$2
container=$3

result=$(find /etc/ssl/keyhelp/letsencrypt/$user/$domain/ -type f -mmin -15)
if [ -n "$result" ]; then
	cp /etc/ssl/keyhelp/letsencrypt/$user/$domain/private.pem /mnt/docker/$container/certs/private.pem
	cp /etc/ssl/keyhelp/letsencrypt/$user/$domain/fullchain.pem /mnt/docker/$container/certs/fullchain.pem
	/usr/bin/docker restart $container
fi
exit 0

mfg Micha
--
If Bill Gates had a nickel for every time Windows crashed …
… oh wait, he does.
User avatar
Jolinar
Community Moderator
Posts: 3560
Joined: Sat 30. Jan 2016, 07:11
Location: Weimar (Thüringen)
Contact:

Re: Letsencrypt Zertifikate kopieren bei renew

Post by Jolinar »

Ach herrlich...so macht Forenaktivität echt Spaß :mrgreen:
Oft erwarten die Leute ja, daß man ihnen eine Lösung für ihr Problem schön vorgekaut auf einem Silbertablett serviert. Hier läuft das anders, ihr zeigt Eigeninitiative, bringt gute Vorschläge ein und arbeitet gemeinsam an der Lösung.
Einfach eine geile Community! :mrgreen: :mrgreen: :mrgreen:

Sorry, das mußte ich mal loswerden. 8-)
Wenn jemand inkompetent ist, dann kann er nicht wissen, daß er inkompetent ist. (David Dunning)

Data Collector für Community Support
___
Ich verwende zwei verschiedene Schriftfarben in meinen Beiträgen /
I use two different font colors in my posts:
  • In dieser Farbe schreibe ich als Moderator und gebe moderative Hinweise oder begründe moderative Eingriffe /
    In this color, I write as a moderator and provide moderative guidance or justify moderative interventions
  • In dieser Farbe schreibe ich als Community Mitglied und teile meine private Meinung und persönlichen Ansichten mit /
    In this color, I write as a community member and share my personal opinions and views
Post Reply