- Mitglied seit
- 05. Sep 2012
- Beiträge
- 3.259
- Punkte für Reaktionen
- 601
- Punkte
- 174
Hi das mit dem skript wäre super.
1. der Raspberry erstellt und erneuert die Zertifikate.
2. die Zertifikate werden direkt in ein Verzeichnis auf der DS geschrieben.
3. Auch nach dem Erneuern erfolgt das Schreiben in das NFS-Verzeichnis welches sich auf der DS befindet.
Okay prima. Und danke nochmals für die vielen Details zur Cert Erstellung mittels acme. Das werde ich definitv ausprobieren.
Wie sieht dann Punkt 4. in deinem Workflow aus?
Kopierst du aktuell die erneuerten Zertifikate manuell an die entsprechende Stelle wo sie die Diskstation erwartet werden oder erneuerst du die Certs über die DSM GUI?
Genau diesen Punkt 4. können wir automatisieren...
Ich habe da auch schon ein Grundgerüst für ein bash Script.
Du kannst es dir gerne einmal im Detail ansehen und Anhand eines Bespiels testen.
Hier das Script, die Details sind im Code erklärt.
Ich habe dem Kind folgenden Namen gegeben: check-new-cert.bash
Erstelle dir zunächst in einem Verzeichnis deiner Wahl einen test Ordner (in meinem Script Beispiel direkt im home Verzeichnis ~/test ) und passe die Pfade für die Variablen (orange und grün) entsprechend an.
Ertelle darin die Datei Cert.txt, kann leer sein oder irgendeinen sinnlosen Inhalt vorhalten.
Also sollten sich in deinem test Ordner nur das script selbst und die Cert.txt Datei befinden.
Die grün markierten Dateien werden vom Script erstellt und werden für den Checksummenvergleich herangezogen.
Für den Test noch nicht relevant, aber der blaue Teil ist derjenige der später noch zu befüllen ist. Aber zunächst kümmern wir uns um den Test selbst.
Lasst euch nicht verwirren, es ist mehr Kommentar als Code selbst
Rich (BBCode):
#!/bin/bash
# Definition der verwendeten Dateien
CertFile=~/test/Cert.txt
HashFileCurrent=~/test/hash-current.txt
HashFileTemp=~/test/hash-temp.txt
# Prüfen ob die Zertifikatsdatei an dem angebenen Ort vorhanden ist
# Wenn ja, dann erstelelle von dieser Datei eine CSUM (in diesem Beispiel eine MD5)
# und schreibe die Checksumme anschließend in die Datei welche unter der Variable $HashFileTemp definiert wurde.
if [ -f $CertFile ]; then
hashmd5=`openssl dgst -md5 $CertFile | egrep -o [0-9a-zA-Z]{32}`
echo $hashmd5 > $HashFileTemp # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
fi
# Prüfen ob bereits eine aktuelle Checksumme zur Zertifikatsdatei existiert. Somit wird überprüft ob die Datei welche in der
# Variable $HashFileCurrent definiert wurde vorhanden ist.
# Wenn somit beide Datein vorhanden sind, welche zum einen die aktuelle Checksumme und die Checksumme die zur Überprüfung
# herangezogen wird existieren sprich $HashFileCurrent UND $HashFileTemp dann prüfe auf einen Unterschied und vergleiche.
if [ -f $HashFileCurrent ] && [ -f $HashFileTemp ]; then
diffresult=`diff $HashFileCurrent $HashFileTemp`
# Jetzt wird überprüft ob das Resultat des Vergleichs nicht leer ist, sprich beide Checksummen sich unterscheiden.
# Dann wird die gegenwärtige aktuelle Checksumme mit der neu genierten überschrieben und abgelegt.
# Dies hat zur Forlge, dass die Checksumme welche in der Datei abgelegt ist wieder zur gegenwärtigen Cert-Datei passt.
if [ ! -z "$diffresult" ]; then
echo Checksumme hat sich geändert! # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
echo Alte CSUM: `cat $HashFileCurrent` # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
echo Neue CSUM: `cat $HashFileTemp` # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
mv $HashFileTemp $HashFileCurrent
####################################################################################
#
# ToDo:
# Dies ist der Teil bzw. Sektion wo die gewünschten Aktionen
# ausgeführt werden. In diesem Fall, das Kopieren der verfügbaren
# und erneuerten Cert Dateien an die entsprechende Stelle der Diskstation
#
####################################################################################
# In dem Fall dass sich die Checksummen nicht unterscheiden, sprich die Variable des results "leer" ist
# soll lediglich die temporär ertellte Checksummen Datei entfernt werden.
else
echo Keine Änderung! # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
rm $HashFileTemp
fi
# Wenn zu Beginn, also bei der ersten Ausführung des Scripts noch keine aktulle Checksummen Datei zum Vergleich existiert
# dann lege diese anhand der aktuell erstellen CSUM ab. Umbenennen der temporären Datei in die aktuell gültige.
else
if [ -f $HashFileTemp ]; then
echo Initial: Noch kein CSUM Vergleich möglich. # Die Ausgabe dient nur fürs debugging (kann später entfernt werden)
mv $HashFileTemp $HashFileCurrent
fi
fi
exit 0
Wenn alle Vorbereitungen getroffen sind, dann musst du das Script File noch ausführbar machen --> "chmod +x ~/test/check-new-cert.bash"
Dann wird das Script ausgeführt...
Rich (BBCode):
~/test/check-new-cert.bash
a.) Die erste Ausgabe sollte lauten:
> Initial: Noch kein CSUM Vergleich möglich.
b.) Führst man das Script ein zweites mal aus sollte folgende Ausgabe erscheinen:
> Keine Änderung!
c.) nun ändert man den Inhalt der Datei "Csum.txt" und fürht das Script anschließend erneut aus. Ausgabe entsprechend:
> Checksumme hat sich geändert!
> Alte CSUM: 76f17c5e0c0d27ca39e67d6d0b2dbea6
> Neue CSUM: 732d91367e617cfa7369481b180227f2
d.) das Script erneut ausführen ohne eine Änderung an der Datei vorzunehmen ergibt folglich:
> Keine Änderung!
Der blaue Teil der noch befüllt werden muss schauen wir uns im Nachhinein an.
Die Synology Diskstation speichert und verwaltet ihre Zertifikate an folgendem Ort:
/usr/syno/etc/certificate/_archive
Darin befinden sich für jedes Zertifikat ein kryptisches Unterverzeichnis welches über folgende Datei aufgeschlüsselt wird und zugeordnet werden kann.
Die Datei "INFO" --> also /usr/syno/etc/certificate/_archive/INFO
Ein Auszug zeigt zum Beispiel folgenden Inhalt:
Rich (BBCode):
},
"R1EdUK" : {
"desc" : "Name des Zertifikats",
"services" : [
{
"display_name" : "sub.domain.tld",
"isPkg" : false,
"owner" : "root",
"service" : "FQDN",
"subscriber" : "system"
}
]
},
Somit liegen die Zertifikate für die Domain aus diesem Beispiel sub.domain.tld unter folgendem Verzeichnis /usr/syno/etc/certificate/_archive/R1EdUK
D.h. man muss in der blau markierten Sektion das Kopiren der jeweiligen Zertifikate richtig den kryptischen Verzeichnissen zuordnen.
Für den Anfang kann man dies händisch für jede Domain heraussuchen und in das Script eintragen und verwenden. Das kryptisch erstellte Verzeichnis behält seinen Namen solange man das Cert nicht aus dem Cert Manager löscht und neu anlegt. Hier könnte man sich für später auch überlegen, die Zuordnung zur jeweiligen Domain passen zum kryptischen Verzeichnis per Script herauszusuchen.
Ich weiß aktuell nicht wie die Synology Diskstation die Certs neu einliest... Ich bin mir nicht sicher ob es ausreicht die Dateien an die besagte Stelle zu kopieren oder ob ein Reload bzw. Restart des Webservers notwendig ist.
--luddi