Aktionen

PfSense - ACME-Zertifikate auf anderen Server kopieren

Aus znilwiki

Changelog:

  • 15.06.2024 erste Version

Vorwort

Ich liebe den pfSense ACME-Service (im Package Manager installierbar).
In diesem kann ich bequem den Abruf von Zertifikaten auch per DNS-Challange und über die IONOS-API einrichten.
Auf Wunsch werden die Zertifikate auch noch mal separat im Ordner

/conf/acme

auf der pfSense gespeichert um diese auch woanders verwenden zu können.
Am einfachsten an diese Zertifikate heran zu kommen, ist diese zu pushen, also von der pfSense aus automatisch auf das andere System kopieren zu lassen.


Das Erstellen der zusätzlichen Zertifikatsdateien aktivieren

Wir aktivieren den Punkt Write Certificates:

ClipCapIt-240615-124651.PNG

SSH Key erzeugen

Wir melden uns per SSH an der pfSense an (Benutzer admin):

ClipCapIt-240615-124947.PNG

und wählen Option 8.
Dann geben wir den Befehl

ssh-keygen ein, die Passphrase lassen wir leer:
ClipCapIt-240615-125211.PNG

Nun können wir uns den Public Key anzeigen lassen:

cat /root/.ssh/id_rsa.pub
ClipCapIt-240615-125436.PNG

Die Ausgabe kopieren wir uns in die Zwischenablage.
Wir Melden uns am Zielsystem per SSH an - mit dem Benutzer unter dem die Dateien abgelegt werden sollen - und bearbeiten die Datei

nano ~/.ssh/authorized_keys2

dort fügen wir den zuvor kopieren Schlüssel in einer neuen Zeile ein und speichern die Datei.

Das testen wir nun indem wir uns von der pfSense aus an diesem Server anmelden. Beim allerersten mal fragt er ob der Fingerprint gespeichert werden soll - was wir bejahen:

ClipCapIt-240615-125852.PNG

Wenn Ihr euch einmal mit exit wieder trennt und noch mal neu verbindet sollte es ohne Nachfrage geschehen.


Kopieren testen

Important.png
Hinweis: Diese Variante kopiert jedes mal alle vorhandenen Zertifikate!

Auf dem Zielsystem müsst Ihr den gewünschten Zielpfad anlegen, dazu also per SSH am Zielsystem angemeldet sein!

mkdir -p /pfsensemeisenweg1/acme/

Nun können wir von der pfSense aus testen ob wir die Dateien dorthin schieben können:

scp -r -i /root/.ssh/id_rsa /conf/acme root@192.168.1.2:/pfsensemeisenweg1/acme
ClipCapIt-240615-130250.PNG

Die Parameter:

scp                      : der Kopierbefehl
-r                       : Rekursiv, also inklusive eventueller Unterverzeichnisse
-i /root/.ssh/id_rsa     : Benutze zur Anmeldung folgenden privaten Schlüssel
/conf/acme               : Quellordner der kopiert werden soll (also dessen Inhalt)
root@                    : Benutzer auf dem Zielsystem
192.168.1.2:             : DNS-Name oder IP des Zielsystems, gefolgt von einem :
/pfsensemeisenweg1/acme  : Zielpfad (unterhalb dessen die Dateien eingefügt werden

Der Befehl überschreibt jedes mal, löscht aber nichts!


Befehl bei den Zertifikatsanforderungen hinterlegen

Unter

Service => Acme Certificates => Certificates

sehen wir die einzelnen Zertifikatsanforderungen.
Ganz unten bei einer Anforderung gibt es die Action list, dort fügen wir unseren scp Befehl als neues Shell Command ein:

ClipCapIt-240615-131028.PNG


Das kopieren wird nun jedes mal ausgeführt wenn das Zertifikat erneuert wurde.


Nicht alle sondern nur ein bestimmtes Zertifikat kopieren

Um nur ein Zertifikat zu kopieren könnte Ihr den Befehl wie folgt abwandeln:

scp -i /root/.ssh/id_rsa /conf/acme/pfsensemeisenweg1.znil.org* root@192.168.1.2:/pfsensemeisenweg1/acme/

Also das -r weglassen, den Namen des Zertifikates ohne die Dateiendungen, gefolgt von einem *
Diesen Befehl fügt Ihr dann statt dessen als Shell Command bei der Zertifikatsanforderung ein.
So könnte Ihr die Zertifikate auch einzeln auf verschiedene Server kopieren.


Auf dem Zielserver eine Aktion auslösen nachdem kopiert wurde

Ich kopieren in meinem Fall die Zertifikate auf einen Apache2 Webserver der dieses Zertifikate dann verwendet.
Dieser muss nach dem Kopieren einmal neu gestartet werden damit er die neuen Zertifikate übernimmt.
Das können wir wiederum als Shell Command dahinter dranhängen:

ssh -i /root/.ssh/id_rsa root@192.168.1.2 "systemctl restart apache2.service"

Windows Server als Ziel

Wenn es sich um mindestens Windows Server 2019 handelt, könnt Ihr die Dateien auch dorthin kopieren.

OpenSSH Server aktivieren

Auf dem Windows-Server geht Ihr auf

Einstellungen => Apps => Optionale Features verwalten

bzw. bei Server 2022 auf

Einstellungen => Apps => Optionale Features
ClipCapIt-240615-133851.PNG

Im Dialog danach wählt Ihr

Feature hinzufügen

und wählt aus der Liste den OpenSSH-Server:

ClipCapIt-240615-134028.PNG

Sobald dieser Installiert ist, ruft die die Dienste auf, sucht den Dienst und stellt diesen um auf "Automatischer Start" und startet diesen auch gleich:

ClipCapIt-240615-134351.PNG

Public Key hinterlegen

Im Profil des Benutzers den Ihr für die Anmeldung verwenden wollt erstellt Ihr den Ordner

C:\Users\Manfred\.ssh

Wenn das über den Dateiexplorer nicht geht so macht es per CMD.

mkdir C:\Users\Manfred\.ssh

dort erstellt Ihr die Textdatei

authorized_keys

(ohne Dateiendung!) und kopiert wieder den Inhalt aus der id_rsa.pub hinein (wie beim Linux Rechner aus).
Weitere Informationen dazu findet Ihr unter:


Zugriff Testen

von der pfSense aus:

ssh -v -i /root/.ssh/id_rsa ZNIL\\manfred@192.168.128.91

Versucht es als Benutzer

ZNIL\MANFRED

Ja, in der Befehlszeile müsst Ihr 2x \ einfügen. Alternativ könntet Ihr auch

ssh -v -i /root/.ssh/id_rsa manfred@znil.local@192.168.128.91

schreiben.
Ihr solltet in einer Eingabeaufforderung landen, Wiederum müsst Ihr einmalig den Host-Key akzeptieren Bei Problemen:
Auf der Seite der pfsense könnte ihr den ssh-Befehl um ein

-v

ergänzen, dann erzählt er mehr, auf der Server Seite könnte Ihr den OpenSSH Dienst beenden und in einer Eingabeaufforderung

sshd -d

starten. Nach jeder Verbindung oder Fehler beendet sich der manuell gestartete Server auf der Windows Seite aber wieder und muss neu gestartet werden.
Hilfreich ist gerade das Serverlog, da könnt Ihr dann auch sehen in welchen Dateien er es probiert.


Dateien kopieren

scp -i /root/.ssh/id_rsa /conf/acme/pfsensemeisenweg1.znil.org* ZNIL\\manfred@192.168.128.91:/C:/acme/

kopiert in diesem Fall die Dateien des einen Zertifikates nach

C:\acme

Befehl unter Windows ausführen lassen

Um unter Windows z.B. einen Dienst neu zu starten:

ssh -i /root/.ssh/id_rsa ZNIL\\manfred@192.168.128.91 "net stop spooler && net start spooler"

startet die Druckwarteschlange neu (Benutzer muss Admin-Rechte haben),

ssh -i /root/.ssh/id_rsa ZNIL\\manfred@192.168.128.91 "C:\acme\test.cmd"

startet das Skript

C:\acme\test.cmd

Quellen

Inspiriert von: https://victorlclopes.medium.com/copy-pfsense-acme-certificate-to-another-server-e42c611c47ec
Ich habe abgewandelt das entweder alle Zertifikate kopiert werden (so kann man den Befehl einfach bei jedem Zertifikat gleich einfügen) oder im 2. Beispiel alle 5 Dateien eines Zertifikates (und nicht nur 3).


Kommentare

Loading comments...