Dit document beschrijft stap voor stap hoe de certificaatvernieuwing op de Synology NAS voor nas.arp-ict.nl is ingericht, hoe de definitieve werkende oplossing eruitziet, hoe je de taak in Synology Taakplanner aanmaakt, welke terminalcommando’s je gebruikt om te verbinden en te controleren, en welke troubleshooting-stappen zijn gebruikt om het probleem op te lossen.
De handleiding is geschreven voor de huidige situatie:
nas.arp-ict.nlarp-ict.nlarp-ict.nlwww.arp-ict.nlnas.arp-ict.nlgit.arp-ict.nlunifi.arp-ict.nlacme.sh5443De oorspronkelijke automatische renew-opzet draaide wel, maar werkte niet volledig door in Synology DSM.
De oude taak gebruikte in de basis dit:
/root/.acme.sh/acme.sh --cron --home /root/.acme.sh
pidfile=/run/nginx.pid; [ -f "$pidfile" ] && kill -HUP "$(cat "$pidfile")" || true
Daarmee werd:
acme.sh wel uitgevoerdMaar DSM bleef toch nog een oud certificaat serveren.
De oorzaak bleek dat Synology het actieve certificaat niet alleen uit system/default gebruikte, maar ook uit de actieve map onder:
/usr/syno/etc/certificate/_archive/<ID>
In dit geval was de actieve certificate archive map:
/usr/syno/etc/certificate/_archive/4Kx8rc
De definitieve oplossing bestaat daarom uit een eigen script dat:
acme.sh --cron uitvoert/root/.acme.sh/arp-ict.nl_ecc/ pakt_archive mapsystem/defaultHiermee werkt de vernieuwing nu correct.
acme.sh bewaart het certificaat en de sleutel in:
/root/.acme.sh/arp-ict.nl_ecc/
Belangrijke bestanden daar:
arp-ict.nl.cerarp-ict.nl.keyfullchain.cerSynology gebruikt meerdere locaties voor certificaten:
/usr/syno/etc/certificate/system/default/
Belangrijke bestanden:
cert.pemfullchain.pemprivkey.pemprivate.keyDe actieve default-certificate-ID staat in:
/usr/syno/etc/certificate/_archive/DEFAULT
De inhoud daarvan is bijvoorbeeld:
4Kx8rc
Daarmee wordt de actieve map:
/usr/syno/etc/certificate/_archive/4Kx8rc/
Ook daar moeten de certificaatbestanden actueel zijn.
Tijdens de analyse bleek:
acme.shsystem/default alleen updaten was niet voldoende_archive map was bijgewerkt, werd het nieuwe certificaat live gebruiktDaarom werkt het script beide locaties bij.
Gebruik vanaf je Mac in Terminal:
ssh <gebruikersnaam>@nas.arp-ict.nl
Voorbeeld:
ssh danny@nas.arp-ict.nl
Als je NAS op een andere poort luistert, bijvoorbeeld 225:
ssh -p 225 <gebruikersnaam>@nas.arp-ict.nl
Voorbeeld:
ssh -p 225 danny@nas.arp-ict.nl
Als DNS of port-forwarding niet werkt, kan het ook rechtstreeks via Tailscale-IP:
ssh <gebruikersnaam>@100.126.42.77
Of met poort:
ssh -p 225 <gebruikersnaam>@100.126.42.77
Met nc kun je testen of de poort bereikbaar is:
nc -vz nas.arp-ict.nl 225
Of:
nc -vz 100.126.42.77 225
Veel certificaatbestanden staan onder /root of in systeemmappen. Daarvoor is root nodig.
Na inloggen:
sudo -i
Daarna kun je root-only paden bekijken.
/root/.acme.sh
/root/.acme.sh/arp-ict.nl_ecc
/root/.acme.sh/account.conf
/root/.acme.sh/arp-ict.nl_ecc/arp-ict.nl.conf
/usr/syno/etc/certificate/system/default
/usr/syno/etc/certificate/_archive/DEFAULT
De inhoud hiervan is de actieve certificate-ID.
/var/log/acme-renew-synology.log
Hieronder staat het definitieve werkende script.
#!/bin/sh
set -eu
ACME_HOME="/root/.acme.sh"
DOMAIN_DIR="$ACME_HOME/arp-ict.nl_ecc"
DOMAIN_NAME="arp-ict.nl"
LOGFILE="/var/log/acme-renew-synology.log"
DEFAULT_ID="$(cat /usr/syno/etc/certificate/_archive/DEFAULT)"
ARCHIVE_DIR="/usr/syno/etc/certificate/_archive/$DEFAULT_ID"
SYSTEM_DIR="/usr/syno/etc/certificate/system/default"
{
echo "===== $(date) ====="
echo "Starting renew for $DOMAIN_NAME"
"$ACME_HOME/acme.sh" --cron --home "$ACME_HOME"
echo "Copying certificate files to active Synology certificate locations"
cp "$DOMAIN_DIR/$DOMAIN_NAME.cer" "$ARCHIVE_DIR/cert.pem"
cp "$DOMAIN_DIR/fullchain.cer" "$ARCHIVE_DIR/fullchain.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$ARCHIVE_DIR/privkey.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.cer" "$SYSTEM_DIR/cert.pem"
cp "$DOMAIN_DIR/fullchain.cer" "$SYSTEM_DIR/fullchain.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$SYSTEM_DIR/privkey.pem"
cp "$DOMAIN_DIR/$DOMAIN_NAME.key" "$SYSTEM_DIR/private.key"
echo "Restarting nginx"
synosystemctl restart nginx
echo "Currently served certificate:"
echo | openssl s_client -connect nas.arp-ict.nl:5443 -servername nas.arp-ict.nl 2>/dev/null | openssl x509 -noout -subject -issuer -dates
echo "Done"
echo
} >> "$LOGFILE" 2>&1
set -euZorgt ervoor dat het script stopt bij fouten of ongedefinieerde variabelen.
ACME_HOMEWijst naar de acme.sh installatie.
DOMAIN_DIRWijst naar de map met certificaatbestanden voor arp-ict.nl.
DEFAULT_IDLeest de actieve Synology certificate-ID uit.
ARCHIVE_DIRStelt op basis van DEFAULT_ID de actieve _archive doelmap vast.
SYSTEM_DIRDoelmap voor system/default.
acme.sh --cronDraait de reguliere renew-logic van acme.sh. Als het certificaat nog niet vernieuwd hoeft te worden, gebeurt er niets.
cp ...Kopieert het actuele certificaat en de sleutel naar beide Synology-locaties.
synosystemctl restart nginxHerstart nginx via Synology zodat het nieuwe certificaat actief wordt.
openssl s_client ...Controleert direct welk certificaat de NAS werkelijk uitserveert op nas.arp-ict.nl:5443.
mkdir -p /usr/local/bin
vivi /usr/local/bin/renew-cert-synology.sh
Druk in vi op:
i
Plak de volledige scriptinhoud uit het hoofdstuk hierboven.
Druk op:
Esc
Typ daarna:
:wq
en druk op Enter.
chmod +x /usr/local/bin/renew-cert-synology.sh
ls -l /usr/local/bin/renew-cert-synology.sh
Je verwacht iets als:
-rwxr-xr-x
of vergelijkbaar, zolang het script maar uitvoerbaar is.
/usr/local/bin/renew-cert-synology.sh
tail -n 50 /var/log/acme-renew-synology.log
===== Tue Mar 31 20:53:00 CEST 2026 =====
Starting renew for arp-ict.nl
[Tue Mar 31 20:53:00 CEST 2026] ===Starting cron===
[Tue Mar 31 20:53:00 CEST 2026] Renewing: 'arp-ict.nl'
[Tue Mar 31 20:53:00 CEST 2026] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory
[Tue Mar 31 20:53:00 CEST 2026] Skipping. Next renewal time is: 2026-05-29T18:28:06Z
[Tue Mar 31 20:53:00 CEST 2026] Add '--force' to force renewal.
[Tue Mar 31 20:53:00 CEST 2026] Skipped arp-ict.nl_ecc
[Tue Mar 31 20:53:00 CEST 2026] ===End cron===
Copying certificate files to active Synology certificate locations
Restarting nginx
[nginx] restarted.
Currently served certificate:
subject=CN = arp-ict.nl
issuer=C = US, O = Let's Encrypt, CN = E7
notBefore=Mar 31 17:29:33 2026 GMT
notAfter=Jun 29 17:29:32 2026 GMT
Done
SkippingDeze melding is normaal als het certificaat nog niet aan vernieuwing toe is:
Skipping. Next renewal time is: ...
Dat betekent:
acme.sh draait correctHet script kopieert daarna alsnog de certificaatbestanden naar de juiste Synology-locaties en herstart nginx.
De oude task die alleen acme.sh --cron en een losse nginx-reload deed, moet je uitschakelen of verwijderen.
Gebruik voortaan nog maar één taak: de nieuwe task die het script uitvoert.
Open in DSM:
Zoek de oude certificaat-renew taak en zet die op Uitgeschakeld.
Klik op:
Gebruik bijvoorbeeld:
Renew certificate SynologyrootZorg dat de taak is ingeschakeld.
Kies:
03:30Bij Door gebruiker gedefinieerd script zet je exact:
/usr/local/bin/renew-cert-synology.sh
Klik op OK of Opslaan.
Selecteer de nieuwe taak in Taakplanner en klik op Uitvoeren.
Via SSH:
tail -n 50 /var/log/acme-renew-synology.log
Controleer of je ziet:
Starting renew for arp-ict.nlCopying certificate files to active Synology certificate locationsRestarting nginxCurrently served certificate:notBefore en notAfterls -la /root/.acme.sh
cat /root/.acme.sh/account.conf
ls -la /root/.acme.sh/arp-ict.nl_ecc
cat /root/.acme.sh/arp-ict.nl_ecc/arp-ict.nl.conf
tail -n 100 /var/log/acme.sh.log
/root/.acme.sh/acme.sh --cron --home /root/.acme.sh --debug
Gebruik dit alleen wanneer je bewust een test of noodvernieuwing wilt doen:
/root/.acme.sh/acme.sh --renew -d arp-ict.nl --ecc --force --debug
echo | openssl s_client -connect nas.arp-ict.nl:5443 -servername nas.arp-ict.nl 2>/dev/null | openssl x509 -noout -subject -issuer -dates
openssl x509 -in /usr/syno/etc/certificate/_archive/4Kx8rc/cert.pem -noout -text | grep -A2 "Subject Alternative Name"
cat /usr/syno/etc/certificate/_archive/DEFAULT
openssl x509 -in /usr/syno/etc/certificate/_archive/4Kx8rc/cert.pem -noout -subject -dates
openssl x509 -in /usr/syno/etc/certificate/system/default/cert.pem -noout -subject -dates
find /usr/syno/etc/certificate -type f | grep -E 'fullchain\.pem|cert\.pem|privkey\.pem|private\.key'
De analyse liet het volgende zien.
Uit het acme.sh log bleek duidelijk dat de cron-job iedere dag draaide.
Voorbeelden uit het log:
===Starting cron===Renewing: 'arp-ict.nl'Skipping. Next renewal time is: ...Dus het probleem was niet dat de taak helemaal niet liep.
In de domeinconfiguratie stond:
Le_Webroot='dns_cf'
dus Cloudflare DNS-validatie
Le_DeployHook='synology_dsm,'
dus Synology deploy hook was aanwezig
Le_RealKeyPath='/usr/syno/etc/certificate/system/default/private.key'
Le_RealFullChainPath='/usr/syno/etc/certificate/system/default/fullchain.pem'
Dat leek op het eerste gezicht correct.
Toen met openssl s_client werd gecontroleerd wat live op nas.arp-ict.nl:5443 werd geserveerd, bleek nog het oude certificaat actief:
notBefore=Oct 19 09:25:49 2025 GMTnotAfter=Jan 17 09:25:48 2026 GMTDat was dus fout.
acme.shIn:
/root/.acme.sh/arp-ict.nl_ecc/arp-ict.nl.cer
zat wel degelijk het nieuwe certificaat:
notBefore=Mar 31 17:29:33 2026 GMTnotAfter=Jun 29 17:29:32 2026 GMTDus de renew zelf was goed gegaan.
system/default was niet genoegNa het handmatig bijwerken van system/default bleef de live service alsnog het oude certificaat geven.
Daaruit bleek dat DSM nog een andere bron gebruikte.
_archiveVia:
cat /usr/syno/etc/certificate/_archive/DEFAULT
werd duidelijk dat de actieve certificate-ID:
4Kx8rc
was.
De map:
/usr/syno/etc/certificate/_archive/4Kx8rc
bevatte nog het oude certificaat.
Pas nadat die map ook handmatig was bijgewerkt en nginx opnieuw was gestart, werd het nieuwe certificaat live gebruikt.
Na het technisch oplossen van het certificaatprobleem gaf Chrome lokaal nog even een waarschuwing, terwijl Safari wel goed werkte.
Dat wees op browsercache of oude security state in Chrome, niet meer op een werkelijk certificaatprobleem op de NAS.
Permission denied op /root/.acme.shls: cannot access '/root/.acme.sh': Permission denied
Je bent nog niet als root bezig.
sudo -i
Daarna opnieuw proberen.
acme.sh doet nietsIn het log staat:
Skipping. Next renewal time is: ...
Dit is normaal. Het certificaat hoeft dan nog niet vernieuwd te worden.
Kijk in het log en controleer dat acme.sh wel gewoon draait.
tail -n 100 /var/log/acme.sh.log
De browser meldt een verlopen certificaat, maar acme.sh zegt dat het certificaat vernieuwd is.
Synology serveert dan nog een oud certificaat uit een andere map dan je verwacht.
Controleer welk certificaat live wordt uitgeserveerd:
echo | openssl s_client -connect nas.arp-ict.nl:5443 -servername nas.arp-ict.nl 2>/dev/null | openssl x509 -noout -subject -issuer -dates
Controleer daarna het certificaat in acme.sh zelf:
openssl x509 -in /root/.acme.sh/arp-ict.nl_ecc/arp-ict.nl.cer -noout -subject -dates
Als die data verschillen, dan gebruikt DSM nog niet het nieuwe certificaat.
system/default is bijgewerkt maar live blijft oud certificaat zichtbaarDSM gebruikt nog de actieve _archive certificate map.
cat /usr/syno/etc/certificate/_archive/DEFAULT
Controleer vervolgens de actieve map:
openssl x509 -in /usr/syno/etc/certificate/_archive/4Kx8rc/cert.pem -noout -subject -dates
Werk naast system/default ook de actieve _archive map bij. Dat doet het definitieve script automatisch.
nas.arp-ict.nl echt in het certificaat zitopenssl x509 -in /usr/syno/etc/certificate/_archive/4Kx8rc/cert.pem -noout -text | grep -A2 "Subject Alternative Name"
Je moet daar DNS:nas.arp-ict.nl zien staan.
Vaak caching of oude security state van Chrome.
Open DevTools in Chrome en gebruik:
Verwijder de sitegegevens van nas.arp-ict.nl in Chrome.
Open de site in een incognitovenster.
Sluit Chrome volledig af en start opnieuw.
WARNING: connection is not using a post-quantum key exchange algorithm.
This session may be vulnerable to "store now, decrypt later" attacks.
Dit is geen directe fout. Het betekent dat de SSH-verbinding wel versleuteld is, maar nog geen post-quantum key exchange gebruikt.
Voor normaal beheer van de NAS is dit meestal geen acuut probleem. Het wijst vooral op een oudere SSH-serverimplementatie aan serverzijde.
find /usr/syno/etc/certificate -type f | grep -E 'fullchain\.pem|cert\.pem|privkey\.pem|private\.key'
Dit is handig om te zien of er naast system/default ook nog:
ReverseProxy/..._archive/...bestaan die mogelijk meespelen.
tail -n 50 /var/log/acme-renew-synology.log
Starting renew for arp-ict.nlCopying certificate files to active Synology certificate locationsRestarting nginxCurrently served certificatenotBefore en notAfterDe definitieve werkende oplossing is nu:
/usr/local/bin/renew-cert-synology.shroot/var/log/acme-renew-synology.log/usr/syno/etc/certificate/system/default_archive mapHiermee is de certificaatvernieuwing voor nas.arp-ict.nl weer betrouwbaar ingericht.