Lets Encrypt Wildcard Zertifikat (ACME v2)

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Echt, auf welchen anderen NAS Distributionen bekommt man Lets Encrypt Wildcard Zertifikate unabhängig vom Dienst des Anbieters?

Wildcard Zertifikate bedingen zwingend die dns-01 Authentifizierung.
https://certbot.eff.org/faq/#does-let-s-encrypt-issue-wildcard-certificates
Sprich derjenige der das Zertifikat beantragt muss Kontrolle über die TXT-records der benutzten Domain haben.
Bsp. du hast Domains bei Strato. Dann bräuchte die DS jetzt Zugriff auf deine DNS records bei Strato.
Wie soll das gehen, wenn Strato jetzt keine API anbietet die dies ermöglicht die certbot/acme2 als plugin benutzen könnten?
Oder jemand ein html-wrapper (sehr schlechte Lösung) schreibt um einen Benutzer zu simulieren, der die Eingaben von Hand vornimmt?
Zaubern kann Synology nicht, da gibt es nichts "zu Ende zu denken".

Cloudflare ist auch ein Domainverwalter wofür eben schon manche Leute Arbeit investiert haben um so eine dns basierte Validerung umzusetzen.

Es gibt schon Scripte die einem helfen können
https://vdr.one/how-to-create-a-lets-encrypt-wildcard-certificate-on-a-synology-nas/
https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

Aber halt noch weit weg von den 3 Clicks wie man aktuell Zertifikate holt.
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Okay dann verstehe ich es nicht ... Provider XY kann alle infos zurückgeben solange kein "*" in der Adresse ist. Und sobald ein * in der Adresse ist, reicht die API nicht aus.
Wenn ich test.domain.ddns.net; domain.ddns.net angebe geht es, ...

Fast alle Anbieter bieten heute aber Wildcard Protokolle an, aber die Provider sind schuld das es nicht mit Synology funktioniert?
Eine API Dokumentation für die Provider hat Synology auch nicht online gestellen, oder habe ich die gerade nicht gefunden... Synology schreibt jetzt seit über einem Jahr das Wildcard gehen soll und nun nach dem 3 Versuch haben sie es in ihre Domain integriert. Wieso holt man sich keine Partner/Provider ins Haus?

Drei klicks ist vielleicht auch nicht das schlimmste, aber ich würde es gern einmal einrichten und mich nicht mehr drum kümmern müssen, das ist das was mich stört.
Habe noch keine Anleitung die Vollautomatisch alles bedenkt und abarbeitet. Das wiederum funktioniert auf anderen Distributionen besser ...
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Sag mir doch mal ein Beispiel für "fast alle Anbieter....heute Wildcard"?
Dann solltest du dich noch weiter schlau lesen.
Gib mir bitte mal EIN Beispiel für andere Distributionen wo es besser läuft, dann kann man vielleicht erkennen wo der geistige Haken sitzt bzw wo der Unterschied ist.

Meinst du einen Webhosting Anbieter ala GoDaddy, Strato oder andere?
Dann vergleichst du hier aber Äpfel mit Birnen.
Dort mietest du z.B: ein Paket welches die Domain example.com enthält und wo du deine Webseite hosten kannst.
Der Anbieter hat die VOLLE Kontrolle über seine Infrastruktur, sprich Server, Nameserver, und alles andere.
Für den ist es jetzt ein "leichtes" ein acme-script herzunehmen und auf seine Infrastruktur anzupassen.
Über das Web-IF sagst du jetzt, dass du gerne ein WC-Zert haben willst für example.com. Das script läuft los und generiert eine Anfrage, schreibt die generierten challenges als TXT record auf den Nameservern die für deine Domain gültig sind, die lets encrypt server fragen das DNS system ab um die Einträge für example.com zu validieren und DANN bekommst du das Zertifikat ausgestellt.
Das ist grob die dns-01 Auth Methode.

Synology verwendet aktuell die http-01 Auth Methode. (dabei ist nur die DS, da hat der DSM volle kontrolle, und die LE Server involviert und es setzt nur korrekt gesetzte dynDNS/CNAME Einträge im DNS voraus die statisch eingetragen werden können. Hier muss NICHT aktiv mit der Infrastruktur des Domainverwalters interagiert werden WÄHREND das Zertifikat angefragt wird)
Du gehst im DSM her und sagst du willst gerne ein Zertifikat für sub.example.com haben. Das script rennt los und meldet dies an die lets encrypt server inklusive eines challenge strings und diese schauen unter sub.example.com/.well-known/acme-challenge/<string> nach, ob sie diesen String dort finden. Da der String nur von deiner DS geliefert wird hast du damit die Kontrolle über diese Subdomain demonstriert und bekommst das Zertifikat.
Für ALLE sub-Domains *.example.com kannst du diese Methode aber nicht verwenden.

Deshalb Äpfel und Birnen.
 

DKeppi

Benutzer
Mitglied seit
01. Apr 2011
Beiträge
3.208
Punkte für Reaktionen
63
Punkte
114

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Meinst du einen Webhosting Anbieter ala GoDaddy, Strato oder andere?

Ja, ich meine sie bieten die Funktion (grundsätzlich) an und haben sicher Interesse das Synology als Partner Ihre Schnittstelle auch nutzt, aber Synology nutzt keine einzige von externen Partnern.

Und wenn Sie es nicht anbieten, dann sollten Sie das vielleicht im Changelog vermerken anstatt zu schreiben das es jetzt pauschal möglich ist. Das stimmt einfach nicht!

Man hätte ja auch im Zuge der Integration einen Prozess einführen können um dynDNS/CNAME Einträge zu generieren, sodass man diese sauber bei den Domainanbietern eintragen lassen hätte können. Ja, dann ist immer noch nicht der Kommunikationsweg sichergestellt. Einige große Partner wären da sicher schon möglich gewesen, oder?

Entschuldige wenn es blöde rüber kommt, will dich nicht ärgern!!!

Danke für die ganze Aufklärung ... ich bin um einiges Schlauer, tut mir leid wenn es doof rüber gekommen ist.

Viele Grüße,
Seger
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Wie gesagt, Schande dem dem Schande gebührt. Und nicht für alles kann man die Alleinschuld auf Synology schieben.
Ich will hier nicht Synology verteidigen, mir geht es einzig und allein um die Hintergründe und was wen wie antreibt.

Ja, es gibt acme.sh und es gibt erarbeitete Plugins für diverse Hoster wie man dort Wildcard Zertifikate bekommen kann.
Aber den Hostern selbst dürfte es reichlich am Allerwertesten vorbei gehen, ob Synology Nutzer über diverse Wege bei ihnen ein WC-Zert bekommen oder nicht.

Mir ging es nur darum zu zeigen, dass es eben kompliziert wird wenn mindestens 3 Parteien beteiligt sind, technisch wie organisatorisch.
Das sind keine "Partner".

Synology bietet jetzt eben in ihrem Ökosystem eine funktionierende Wildcard Lösung an.
Apple wirfst du ja auch nicht vor, dass das neue iOS nicht auf einem Android läuft, oder? ;)

Es ist eben keine Sache, von "lass das mal kurz implementieren", wenn es auf der einen Seite Synology gibt und auf der anderen Seite xxxx tausende Domainverwalter die alle ein klein wenig ihr eigenes Süppchen kochen. Der Weg vom Hoster bei LE ein Zertifikat zu holen ist ja durch das AMCE Protokoll festgeschrieben, ABER wie bei den Hostern die DNS Einträge manipuliert werden können ist a) nicht unbedingt für Dritte zugänglich und b) bei jedem wieder anders.
Nicht umsonst kommt es zu so Listen hier
https://github.com/acmesh-official/acme.sh/tree/master/dnsapi
Wenn es nicht nur eine Standard-API bzw Protokoll für ACME, also die Zertifikatsanforderungen gäbe sondern auch für die andere Seite, der DNS Modifikation (die könnte jeder Hoster intern für sich ja anders übersetzen, solange die externe Schnittstelle universell ist), dann hätte Synology das sicher auch schon längst umgesetzt.
Da ist es nicht zuletzt eine organisatorische und kaufmännische Frage, ob man jetzt versucht für manche Anbieter die eine öffentliche API zur Verfügung stellen, dies umzusetzen. Muss ja auch alles betreut und supported werden.
Und nach 5 Minuten kommt der erste um die Ecke "ich will aber meine Domains nicht bei GoDaddy oder OVH hosten, wieso unterstützt ihr Strato nicht?" etc.
Man sieht aber das aktuell weder die Hoster noch Synology Zeit und Geld investieren um eine globale Lösung zu erzielen.
Da wird es wie immer sein mit dem Grund: Man kann nicht genug Geld abziehen damit.

Und wie gesagt, es gibt ja Lösungen auf script-Basis wo man eben unabhängig vom DSM teils automatisch seine Zertifikate bekommt, oder wo man per script das cert beantragt, die TXT records von Hand beim Hoster einträgt, und dann ein Cert bekommt.... und das ganze nach 90 Tagen wieder.

Und die ketzerischte Frage zum Schluß: Was ist die Hauptmotivation für dich, dass du ein WC-Zert haben willst? Die Anzahl an eh von Hand verwalteten Subdomains kann es denke ich nicht sein. Für weniger als 20 ist auch die aktuelle Lösung ohne WC-Zert gangbar genug.
Meine einzige persönliche Motivation wäre, dass es dann aus dem Zertifikat nicht mehr ersichtlich ist, welche Subdomains alle existieren.
Ob im DSM jetzt ein oder zwanzig Zertifikate automatisch verwaltet werden ist mir reichlich egal.

Disclaimer: Soll hier keine Schleichwerbung sein. Gibt viele andere und gute Hoster auf der Welt.
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Bei mir geht eben diese automatische Aktualisierung nicht und ich habe eine Menge Subdomains > 20

Und würde es gern einfach laufen lassen und mich nicht ständig drum kümmern.

Funktioniert das Skript zu aktualisieren denn bei dir?

-> Ich habe die neuen Pfade in "" gesetzt, wegen der Leerzeichen...


https://vdr.one/how-to-create-a-lets-encrypt-wildcard-certificate-on-a-synology-nas/
HTML:
Good start for a wildcard certificate!

Then use following script to update your certificate every three months.

Unfortunately I don’t know how to force Synology to use the new certificate except restarting the whole server. It’s a reason why the last command in the script forces the server to restart at 4 AM.

# 1. replace “MyDomain.com” with your domain name
# 2. schedule this script to be run once per three months in Task Scheduler

echo “======================================================================”
echo “Certificate Renewal”
echo “======================================================================”
./acme.sh –force –renew -d *.MyDomain.com –dns –yes-I-know-dns-manual-mode-enough-go-ahead-please –log
echo “”

# echo “======================================================================”
# echo “Copying New Files to folder: certs”
# echo “======================================================================”
# cp “/root/.acme.sh/*.MyDomain.com/*.MyDomain.com.cer” “/volume1/certs/MyDomain.com/MyDomain.com.cer”
# cp “/root/.acme.sh/*.MyDomain.com/*.MyDomain.com.key” “/volume1/certs/MyDomain.com/MyDomain.com.key”
# cp “/root/.acme.sh/*.MyDomain.com/ca.cer” “/volume1/certs/MyDomain.com/ca.cer”
# cp “/root/.acme.sh/*.MyDomain.com/fullchain.cer” “/volume1/certs/MyDomain.com/fullchain.cer”
echo “”

echo “======================================================================”
echo “Renewed Certificate Publication”
echo “======================================================================”
certFile=”/root/.acme.sh/*.MyDomain.com/*.MyDomain.com.cer”
chainFile=”/root/.acme.sh/*.MyDomain.com/ca.cer”
fullchainFile=”/root/.acme.sh/*.MyDomain.com/fullchain.cer”
privkeyFile=”/root/.acme.sh/*.MyDomain.com/*.MyDomain.com.key”
privkey_fullchainFile=”/root/.acme.sh/*.MyDomain.com/*.MyDomain.com.privkey_fullchain”
echo “”

# Create file privkey_fullchain.pem
cp $privkeyFile $privkey_fullchainFile
echo “”>>$privkey_fullchainFile
echo “”>>$privkey_fullchainFile
cat $certFile>>$privkey_fullchainFile
cat $chainFile>>$privkey_fullchainFile
echo “”>>$privkey_fullchainFile
echo “”>>$privkey_fullchainFile
# echo “Copy privkey_fullchain.pem to folder: certs”
# cp “$privkey_fullchainFile” /volume1/certs/MyDomain.com/privkey_fullchain.pem

echo “”
echo “======================================================================”
echo “List of new certificate files”
echo “======================================================================”
md5sum –tag “$certFile”
md5sum –tag “$chainFile”
md5sum –tag “$fullchainFile”
md5sum –tag “$privkeyFile”
md5sum –tag “$privkey_fullchainFile”
echo “”
echo “======================================================================”
echo “Replacing the expired certificate files”
echo “======================================================================”

function CopyFile() {
if test -f “$dst”; then
echo “———————————————————————-”
echo “Copying file: $dst”
fileOwner=$(ls -la “$dst”|awk ‘{print $3”:”$4}’)
cp “$src” “$dst”
chmod 400 “$dst”
chown $fileOwner “$dst”
md5sum –tag “$dst”
ls -la “$dst”
fi
}

function CopyCert() {

# Display a name of the folder processed
echo “Folder Name: $i”

# Get an owner and group name of the folder

src=”$certFile”
dst=”$i/cert.pem”
CopyFile

src=”$chainFile”
dst=”$i/chain.pem”
CopyFile

src=”$fullchainFile”
dst=”$i/fullchain.pem”
CopyFile

src=”$privkeyFile”
dst=”$i/privkey.pem”
CopyFile

src=”$privkey_fullchainFile”
dst=”$i/privkey_fullchain.pem”
CopyFile

echo “======================================================================”
}

i=”/usr/syno/etc/certificate/system/default”
CopyCert

find “/usr/syno/etc/certificate/AppPortal/” -name “privkey.pem” -printf “%h\n”|while read i
do
CopyCert
done

find “/usr/local/etc/certificate/” -name “privkey.pem” -printf “%h\n”|while read i
do
CopyCert
done

# Restart server at 4AM
/sbin/shutdown -r 04:00

Ich bekomme immer mehrere Fehler:

HTML:
Aufgabe: Update Zertifikat
Startzeit: Sun, 19 Apr 2020 12:43:48 GMT
Stoppzeit: Sun, 19 Apr 2020 12:43:48 GMT Aktueller Status: 2 (Unterbrochen)
Standardausgabe/Fehler:
======================================================================
Certificate Renewal
======================================================================
[Sun Apr 19 12:43:48 CEST 2020] Unknown parameter : --yes-I-know-dns-manual-mode-enough-go-ahead-please

/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/WildCard Zertifikat Erneuern.sh: line 8: $'\r': command not found ======================================================================
Copying New Files to folder: volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/domainxyz.ddns.net/
======================================================================

/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/WildCard Zertifikat Erneuern.sh: line 17: $'\r': command not found ======================================================================
Renewed Certificate Publication
======================================================================
“”
/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/WildCard Zertifikat Erneuern.sh: line 27: $'\r': command not found
cp: cannot stat '/root/.acme.sh/*.domainxyz.ddns.net/*.domainxyz.ddns.net.key\r': No such file or directory

Das kopieren findet auch irgendwie statt, aber eben ohne ende Fehler ...

Viele Grüße,
Seger
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Ich habe jetzt mal nur zum Test manuell ein Zertifikat geholt. Erster Teil von hier
http://www.stueben.de/lets-encrypt-wildcard/

Und dann von Hand die INFO bearbeitet und per reload-certs script in die DSM GUI gebracht. Teile von hier
https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

Wie es mit Erneuerung aussieht werde ich dann irgendwann sehen, wenn ich es probiere. Da weder 1blu noch Strato wo ich es grad testen kann eine API bieten, kann ich es wohl nicht ganz automatisieren, falls ich den TXT record immer anpassen muss.

Bei dir würde ich als erstes an Leerzeichen Probleme denken. Entweder mit Anführungszeichen für die Pfade arbeiten oder Leerzeichen escapen mit
Code:
text\ text
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
@seger85
bitte beachte, dass die meisten Argumente von acme.sh zwei Minuszeichen erfordern.

Edit:
Vor einigen Tagen hatte ich das auch mal mit den Infos von hier bzw. den verlinkten Infos aus dem englischen Syno-Forum ausprobiert - erfolgreich. Den TXT-Record hatte ich bei Strato händisch angelegt. Ich hoffe, der ändert sich nicht so oft (vorzugsweise nie)
 
Zuletzt bearbeitet:

blinddark

Benutzer
Mitglied seit
03. Jan 2013
Beiträge
1.385
Punkte für Reaktionen
34
Punkte
68
Wie es mit Erneuerung aussieht werde ich dann irgendwann sehen, wenn ich es probiere. Da weder 1blu noch Strato wo ich es grad testen kann eine API bieten, kann ich es wohl nicht ganz automatisieren, falls ich den TXT record immer anpassen muss.
Wie oft musst du denn den txt-Eintrag anpassen. Zwei Erneuerungen habe ich nun schon geschafft.
 

rubinho

Benutzer
Mitglied seit
06. Jun 2009
Beiträge
62
Punkte für Reaktionen
4
Punkte
8
Oh man, was hatte ich mich schon gefreut, dass jetzt Synology offiziell LE Wildcard Zertifikate unterstützt :(

Aber zu früh gefreut...
Es hatte mich schon stutzig gemacht, als ich keine Zusatz-Credentials für meinen DNS Dienst (In meinem Fall Cloudflare) angeben musste. Ich dachte anfangs es gibt wohl eine neue Validierungsmethode die neu ist, aber Pustekuchen.
Es hatte mich daher nicht wirklich gewundert, dass das Erstellen eines LE WC Certs nicht funktionierte.

Ich frage mich jedoch, warum Synology das nicht kommuniziert ?
Es steht lediglich "Added support for Let's Encrypt wildcard certificates." in den Release Notes und nicht die Beschränkung auf ihre eigene Domain.
Oder hab ich was übersehen ?

Momentan lebe ich noch mit einer Krückenlösung, in dem ich das Wildcard Zertifikat von meiner PFSense per Cronjob auf die Synology kopiere, wenn es erneuert wurde. Schön ist anders...

Gruß
Rubinho
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.104
Punkte
248
Subdomain-NS auf die eigene Syno (DNS-Paket) umbiegen und diese entsprechend für benötigte Hosts freigeben? Dann hätte man die Probleme nur "inhouse" ;)

EDIT: Alternativ einfach die NS-Klamotten an einen Anbieter mit entsprechender API outsourcen
 

rubinho

Benutzer
Mitglied seit
06. Jun 2009
Beiträge
62
Punkte für Reaktionen
4
Punkte
8
EDIT: Alternativ einfach die NS-Klamotten an einen Anbieter mit entsprechender API outsourcen

Wie z.B. Cloudflare
Nur müsste Synology auch eine Möglichkeit anbieten, die API eines DNS Providers einrichten zu können. (Ohne gebastel)
 

blurrrr

Benutzer
Sehr erfahren
Mitglied seit
23. Jan 2012
Beiträge
6.204
Punkte für Reaktionen
1.104
Punkte
248
Tja, dann halt doch "lokal", oder eben Feature-Request einreichen und/oder voten voten voten :eek:
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Kann vielleicht einer von euch einmal einen funktionierenden Code Schnipsel posten, der das gesamte Procedere vollständig und ordnungsgemäß durchführt. Was meine ich mit ordnungsgemäß:

ACME/Zertifikats Dateien lokal verfügbar machen (kein Problem - funktioniert)
ACME/Zertifikats Dateien lokal an einen selbst definierten Pfad kopieren (kein Problem - funktioniert)

Und jetzt was immer nicht geht: verfügbare Dateien ins DSM einspielen, sodass die alten Einstellungen überschrieben werden und als Standard gesetzt werden. Sodass eben die vollautomatische Aktualisierung sichergestellt ist.

TXT Record ist eingetragen und hat sich nicht geändert. Wenn ich den Vorgang nämlich händisch durchführe funktioniert alles.

Bitte leitet mich nicht auf 4 unterschiedliche Seiten wo es funktionieren soll/kann. Ein konkreter Code-Snipsel würde mir hier sicher mehr helfen.

Wenn der Part jetzt noch da ist, kann ich gern den gesamten Code dann auch als manuele Lösung präsentieren. Vielleicht liegt es ja einfach an mir, aber ich komme eben nicht mit den ganzen Links hier zu dieser Automatisierung.

Danke euch jetzt schon vielmals.

Viele Grüße
Seger
 

blinddark

Benutzer
Mitglied seit
03. Jan 2013
Beiträge
1.385
Punkte für Reaktionen
34
Punkte
68

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16

Hilft mir leider auch nicht weiter ....

Ich habe nach wie vor meine Dateien an folgenden Ort:

Rich (BBCode):
#!/bin/bash
# 1. replace "Domain.de” with your domain name
# 2. schedule this script to be run once per three months in Task Scheduler
echo "======================================================================"
echo "Certificate Renewal"
echo "======================================================================"
./acme.sh --force --renew -d *.Domain.de -d Domain.de --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
echo ""

echo "======================================================================"
echo "Copying New Files to folder: volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/"
echo "======================================================================"
cp "/root/.acme.sh/*.Domain.de/*.Domain.de.cer" "/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/Domain.de.cer"
cp "/root/.acme.sh/*.Domain.de/*.Domain.de.key" "/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/Domain.de.key"
cp "/root/.acme.sh/*.Domain.de/ca.cer" "/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/ca.cer"
cp "/root/.acme.sh/*.Domain.de/fullchain.cer" "/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/fullchain.cer"
echo ""

echo "======================================================================"
echo "Renewed Certificate Publication"
echo "======================================================================"
certFile="/root/.acme.sh/*.Domain.de/*.Domain.de.cer"
chainFile="/root/.acme.sh/*.Domain.de/ca.cer"
fullchainFile="/root/.acme.sh/*.Domain.de/fullchain.cer"
privkeyFile="/root/.acme.sh/*.Domain.de/*.Domain.de.key"
privkey_fullchainFile="/root/.acme.sh/*.Domain.de/*.Domain.de.privkey_fullchain"
echo ""

# Create file privkey_fullchain.pem
cp $privkeyFile $privkey_fullchainFile
echo "">>$privkey_fullchainFile
echo "">>$privkey_fullchainFile
cat $certFile>>$privkey_fullchainFile
cat $chainFile>>$privkey_fullchainFile
echo "">>$privkey_fullchainFile
echo "">>$privkey_fullchainFile
echo "Copy privkey_fullchain.pem to folder: volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/"
cp "$privkey_fullchainFile" "/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/privkey_fullchain.pem"

Doch von da geht es nicht weiter, kann mir vielleicht jemand genau sagen, was ich in folgenden Skript Schnipsel auf Basis meines ersten setzen muss:

Rich (BBCode):
#!/bin/bash

# Speichern des Arguments (Übergabeparameter, Such string für die Description)
searchPatternDesc=$1

# Definition der verwendeten Dateien / Dateipfade
# Quellpfade der Zertifikate
OriginRenewedCertPath="/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de"
CertFile=$OriginRenewedCertPath/privkey_fullchain.pem

# Definition der Hash Dateien zum Abgleich auf Änderung
HashFileCurrent=$OriginRenewedCertPath/hash-current.txt
HashFileTemp=$OriginRenewedCertPath/hash-temp.txt

# Zielpfade der Zertifikate
InfoFile=/usr/syno/etc/certificate/_archive/INFO
CertRootPath=/usr/syno/etc/certificate/_archive

# Initialisiere die Variable für das Ergebnis mit dem Default Wert "1" --> Description nicht gefunden
# Wert "0" ---> Description in INFO Datei gefunden
result=1

# 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 # Dieses Echo bleibt, Inhalt der Variable wird in Datei gespeichert.
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(1): Hier wird nun der Speicherort für das Zertifikat anhand dessen Beschreibung
    #       herausgesucht und die aktualisierten Zertifakte anschließend an den Zielort
    #       kopiert und im Anschluss der Webserver (nginx) neu gestartet.
    #
    #
    if [ ! -z "$searchPatternDesc" ]; then

      for randomFolderName in `grep -i -B 1 '"desc"' $InfoFile | grep -Eo '"([a-zA-Z0-9]{6})"' | sed 's/"//g'`; do
        description=`grep -i -A 1 "$randomFolderName" $InfoFile | grep -Eo '"desc" : "(.+)"' | sed 's/"desc" : //g' | sed 's/"//g'`
  
        if [ "$searchPatternDesc" == "$description" ]; then
          #############################################################################
          #
          # ToDo(2): Es wurde ein Verzeichnis zum jeweiligen Argument (Description) gefunden
          #          und das erneuerte Zertifikat wird vom Quellort zum Zielort kopiert.
          #          Hierbei werden alle Dateien mit der Endung *.pem berücksichtigt.
          #          Anschließend wird der Webserver neue gestartet.
          #
          TargetPath=$CertRootPath/$randomFolderName
          cp $OriginRenewedCertPath/*.pem $TargetPath
          #############################################################################
          #
          # restart nginx
          #
          synoservicectl --restart nginx
          #
          #############################################################################
          result=0
          #
          # End of ToDo(2)
          #
          #############################################################################
        fi

        if [ $result -eq 1 ]; then
          : # Nothing to do here, because no description found.
          #echo "No Description found for \"$searchPatternDesc\""
        fi
        # reset the result value to default
        result=1
      done
  
    else
      : # Nothing to Do, only for debugging
      #echo No Search String given!
    fi
    
    #
    # End of ToDo(1) 
    #
    ####################################################################################
  
  # 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

@luddi vielleicht?
 

seger85

Benutzer
Mitglied seit
21. Feb 2018
Beiträge
127
Punkte für Reaktionen
0
Punkte
16
Ich würde gern nachdem ich diese 5 Zertifikatsdateien abgerufen habe, das das 2 Skript die Aktualisierung/Erneuerung in DSM vornimmt. Ich habe bereits über das 1 Skript sichergestellt, dass alle Dateien erneuert werden und per CP zu einem spezielen Pfad kopiert:

"/volume1/DiskStation/Programme/5 Backup/Synology Zertifikat/Wildcard/Domain.de/Beispiel.cer"

Ich kann die Dateien dort jetzt manuell in DSM hinzufügen, mochte es aber so gern automatisiert haben.

Wenn ich es noch genau erklären soll, sag gern Bescheid. Bin gerade nur am Handy und würde es dann später nochmal machen.

Viele Grüße
Seger
 
Zuletzt bearbeitet von einem Moderator:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat