Tegenwoordig is het mogelijk om bij Let's encrypt een certificaat met wildcard aan te vragen. Binnen Synology is dit nog niet ondersteund, maar het is wel mogelijk om deze toe te voegen.
Voor het krijgen van dit certificaat moeten onderstaande handelingen uitgevoerd worden. Dit certificaat is voor de NAS en is op basis van
dit topic op het Engelse forum. Dit topic is voor het VPNPlus package op de Router en wijkt dus af van onderstaande handelingen.
Automatische werkwijze: Eenmalige acties (script instellen en certificaat aanvragen):1. Verbind met de NAS door middel van PuTTy (bij voorkeur, voor de volgende stappen is dit nodig) of SMB/AFP, ga naar de map waarin het script bewaard mag worden en clone de SynologyLetsEncrypt-repository
git clone https://github.com/dvandonkelaar/SynologyLetsEncrypt.git
De git clone zal er voor zorgen dat de map SynologyLetsEncrypt aangemaakt wordt. Ga dus naar de map waarin deze submap aangemaakt moet worden (bijv.
/volume1/Temp)
Zie de
git clone documentation voor alternatieven van dit command.
Standaard is git niet geïnstalleerd binnen DSM. Via
de Synocommunity is deze beschikbaar. Waarschijnlijk is git na installatie niet in de $PATH meegenomen en zal deze moeten worden toegevoegd, of worden aangeroepen via
/volume1/@appstore/git/bin/git (
/volume1 is de locatie waar de packages standaard worden geïnstalleerd. Als dit een ander volume is, zal
/volume1 gewijzigd moeten worden).
2a. Wanneer geen verbinding gemaakt is met PuTTy, dan moet deze verbinding gemaakt worden en kan naar de map uit stap 1 genavigeerd worden.
2b. Maak een
config.ini aan waarin het domein staat.
echo Domain=mijndomein.nl>>config.ini
Vervang hier mijndomein.nl door get gewenste domein.
3. Voer het script uit door middel van:
sudo ./SynologyLetsEncrypt.sh
Dit zorgt voor een output waarin onderstaande staat vermeld:
Add the following TXT record:
Domain: '_acme-challenge.mydomain.tld'
TXT value: 'LongTextValueWhichNeedsToBeAddedToTheDomain'
Please be aware that you prepend _acme-challenge. before your domain
so the resulting subdomain will be: _acme-challenge.domein.nl
Add the following TXT record:
Domain: '_acme-challenge.mydomain.tld'
TXT value: 'LongTextValueWhichNeedsToBeAddedToTheDomain'
Please be aware that you prepend _acme-challenge. before your domain
so the resulting subdomain will be: _acme-challenge.domein.nl
4. Maak bij de hostingprovider
beide DNS TXT records aan met de waarde
_acme-challenge en bovenstaande TXT values.
Wacht eventueel even totdat dit volledig is doorgevoerd bij de hostingprovider. Als dit niet is doorgevoerd zal de vervolgstap niet slagen.
Vervolg acties (het renew-proces):1. Voer het script uit door middel van:
sudo /volume1/Temp/SynologyLetsEncrypt/SynologyLetsEncrypt.sh
Hierbij is het pad afhankelijk van de installatie-map (zie stap 1 van de eenmalige automatische werkwijze)
Het script geeft redelijk wat output, waarbij alleen informatie wordt gegeven over het proces en geen fouten worden weergegeven.
Tijdens dit proces wordt het certificaat aangevraagd en worden de verkregen certificaten gekopieerd naar een submap (de naam hiervan is de datum van uitvoering) van de
certificates-map
certificates in de map
SynologyLetsEncrypt.
De verkregen certificaten worden gekopieerd naar het standaard certificaat van DSM en naar de verschillende packages, behalve het Acitve Directory package (deze heeft een eigen certificaat).
Als laatste wordt nginx en de packages herstart om de wijzigingen door te voeren.
2. Als dit proces goed gaat kan dit aan de taakplanner van DSM worden toegevoegd.
De taakdetails zijn dan als volgt:
geplande taak >
door gebruiker gedefinieerd script.
Tabblad algemeen: gebruiker is
root Planning:
Uitvoeren op de volgende datum: Elke 3 maanden herhalen Taakinstelling: Opdracht uitvoeren >
"/volume1/Temp/SynologyLetsEncrypt/SynologyLetsEncrypt.sh"Quotes in de taakinstelling zijn niet nodig als het pad geen spaties bevat. Verder is het pad naar de map afhankelijk van de installatie-map (zie stap 1 van de eenmalige automatische werkwijze)
De uitvoerdetails kunnen nog toegestuurd worden om te controleren of het proces goed is verlopen.
Handmatige werkwijze:1. Verbind met de NAS door middel van PuTTy en log in als root.
2. Download het
acme.sh script, welke nodig is om een certificaat te krijgen.
wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
chmod a+x acme.sh
3. Vraag het certificaat op het domein aan, hier moet natuurlijk
mijndomein.nl vervangen worden door het gewenste domein.
./acme.sh --issue -d mijndomein.nl -d *.mijndomein.nl --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
Dit zorgt voor een output die lijkt op aan onderstaande.
Creating domain key
The domain key is here: /root/.acme.sh/mijndomein.nl/mijndomein.nl.key
Multi domain='DNS:mijndomein.nl,DNS:*.mijndomein.nl'
Getting domain auth token for each domain
Getting webroot for domain='.mijndomein.nl'
Getting webroot for domain='*.mijndomein.nl'
You need to add the txt record manually.
Add the following TXT record:
Domain: '_acme-challenge.mijndomein.nl'
TXT value: 'LangeTekstValueWelkeInHetDomeinMoetWordenIngevuld'
Please be aware that you prepend _acme-challenge. before your domain
so the resulting subdomain will be: _acme-challenge.mijndomein.nl
Please add the TXT records to the domains, and re-run with --renew.
Please add '--debug' or '--log' to check more details.
See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh
4. Maak bij de hostingprovider een DNS TXT record aan met de waarde
_acme-challenge en vul het bovenstaande TXT value in.
Wacht eventueel even totdat dit volledig is doorgevoerd bij de hostingprovider. Als dit niet is doorgevoerd zal de vervolgstap niet slagen.
5. Hierna moet het script opnieuw gedraaid worden met het --renew commando
./acme.sh --renew -d mijndomein.nl -d *.mijndomein.nl --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
Dit zorgt voor een output die lijkt op onderstaande.
....
-----END CERTIFICATE-----
Your cert is in /root/.acme.sh/mijndomein.nl/mijndomein.nl.cer
Your cert key is in /root/.acme.sh/mijndomein.nl/mijndomein.nl.key
The intermediate CA cert is in /root/.acme.sh/mijndomein.nl/ca.cer
And the full chain certs is there: /root/.acme.sh/mijndomein.nl/fullchain.cer
6. Kopieer de benodigde certificaten naar een gedeelde map om deze toe te kunnen voegen aan DSM.
Hieronder is
/volume1/Temp aangehouden als gedeelde map.
cp "/root/.acme.sh/mijndomein.nl/mijndomein.nl.cer" "/volume1/Temp/mijndomein.nl.cer"
cp "/root/.acme.sh/mijndomein.nl/mijndomein.nl.key" "/volume1/Temp/mijndomein.nl.key"
cp "/root/.acme.sh/mijndomein.nl/ca.cer" "/volume1/Temp/ca.cer"
7. De certificaten kunnen worden toegevoegd aan DSM zoals in onderstaande screenshots beschreven.
8. Configureer DSM zodat het certificaat bij de benodigde toepassingen gebruikt kan worden.
Update 07-12-2019:Het automatisch uitvoeren van het proces (aanvragen en updaten) heb ik werkend gekregen. Het script is te vinden op
GitHub.
Deze kan automatisch of handmatig uitgevoerd worden en vervangt het huidige certificaat. Dit elimineert onderstaand opgesomde nadelen.
Update 18-12-2019:Tijdens het updateproces werden de certificaten niet naar de packages gekopieerd door een typfout in een variabele, waardoor de certificaten voor deze packages niet geüpdatet werden.
Het acme.sh-script zet .conf-bestanden in de map
/root/.acme.sh. Als deze hier staan wordt de renew-procedure gebruikt en wordt het certificaat op basis van de (in het issue-proces) gespecificeerde DNS-records vernieuwd.
Verder is het oude pad voor de Synology active directory server certificaten toegevoegd aan de uitgesloten paden voor het updaten van de certificaten.
In bovenstaande how-to heb ik de nieuwe werkwijze (d.m.v. het
SynologyLetsEncrypt-script) omschreven en de oude (handmatige) en nieuwe werkwijze gesplitst.
Nadelen:
1. Het certificaat is ca. 2 maanden geldig en moet daarna dus opnieuw worden toegevoegd. Gezien met deze methode het certificaat handmatig moet worden toegevoegd zal dit voorlopig ook nog niet automatisch gebeuren.
2. Het via de commandline toevoegen (of vervangen) van een certificaat heb ik nog niet werkend kunnen krijgen, het werkend krijgen van het wildcard certificaat had de eerste prioriteit. Dit proces automatisch laten verlopen totdat Synology dit geïmplementeerd heeft (of totdat mijn setup wijzigt) moet ik nog goed onderzoeken.
3. Het updaten van een certificaat kan volgens mij door een bestaand certificaat te importeren in plaats van een nieuw certificaat toe te voegen (zie 1e screenshot), maar hier heb ik verder geen informatie over kunnen vinden elders op het internet.