- Mitglied seit
- 14. Apr 2018
- Beiträge
- 272
- Punkte für Reaktionen
- 4
- Punkte
- 18
Und weiter geht´s...
Ich möchte gerne, dass das Let´sEncrypt-Zertifikat, von der Diskstation automatisch an die Fritzbox weitergereicht wird. Warum? Niemand liest oder klickt sich gerne durch Zertifikatswarnung.
Ich verwende als DDNS-Dienst myfritz von AVM (kostenlos und schnell eingerichtet). Per Diskstation wurde für diese DDNS-Adresse ein Zertifikat bei Let´sEncrypt abgerufen.
Exportiere ich das Zertifikat manuell, erhalte ich in archive.zip
cert.pem
chain.pem
privkey.pem
Verschieden Howtos erklären, wie sich diese Dateien zusammenfügen lassen, um sie in die Fritzbox übernehmen zu können.
Das Let´s Encrypt-Zertifikat muss regelmässig per Aufgabenplaner erneuert werden:
Um dieses automatisch aktualisiertes Zertifikat auf der Fritzbox zu erhalten, soll nun per Skript eine .pem Datei von der Diskstation in die Fritzbox importiert werden.
https://gist.github.com/wikrie/f1d5747a714e0a34d0582981f7cb4cfb
USERNAME, PASSWORD sind abhängig von den Einstellungen der FB, klar.
Etwas Recherche ergab: CERTPATH ist in /usr/syno/etc/certificate/_archive/... (https://www.synology-forum.de/showthread.html?80821-SSL-Zertifikat-Speicherpfad)
Aus den Comments zum Link ergibt sich außerdem, dass in line 16 iconv zu uconv abgeändert werden soll.
Nur, wenn ich nun das Skript ausführe, ändert sich in der FB nichts.
Wenn das Skript läuft, soll es übrigens folgendermassen im Aufgabenplaner zusammen mit der Erneuerung des Zertifikats aufgerufen werden können
Vielleicht ist dieses Weg auch völlig überholt? Und Docker ist dafür mittlerweile zB dein Freund. Ich weiss es nicht. Klärt mich auf
Ich möchte gerne, dass das Let´sEncrypt-Zertifikat, von der Diskstation automatisch an die Fritzbox weitergereicht wird. Warum? Niemand liest oder klickt sich gerne durch Zertifikatswarnung.
Ich verwende als DDNS-Dienst myfritz von AVM (kostenlos und schnell eingerichtet). Per Diskstation wurde für diese DDNS-Adresse ein Zertifikat bei Let´sEncrypt abgerufen.
Exportiere ich das Zertifikat manuell, erhalte ich in archive.zip
cert.pem
chain.pem
privkey.pem
Verschieden Howtos erklären, wie sich diese Dateien zusammenfügen lassen, um sie in die Fritzbox übernehmen zu können.
Code:
cat cert.pem chain.pem privkey.pem > fritz.pem
Das Let´s Encrypt-Zertifikat muss regelmässig per Aufgabenplaner erneuert werden:
Code:
/usr/syno/sbin/syno-letsencrypt renew-all
Um dieses automatisch aktualisiertes Zertifikat auf der Fritzbox zu erhalten, soll nun per Skript eine .pem Datei von der Diskstation in die Fritzbox importiert werden.
https://gist.github.com/wikrie/f1d5747a714e0a34d0582981f7cb4cfb
PHP:
#!/bin/bash
# parameters
USERNAME="maybe empty"
PASSWORD="fritzbox-password"
CERTPATH="/usr/syno/etc/certificate/_archive/..."
CERTPASSWORD="cert password if needed"
HOST=http://fritz.box
# make and secure a temporary file
TMP="$(mktemp -t XXXXXX)"
chmod 600 $TMP
# login to the box and get a valid SID
CHALLENGE=`wget -q -O - $HOST/login_sid.lua | sed -e 's/^.*<Challenge>//' -e 's/<\/Challenge>.*$//'`
HASH="`echo -n $CHALLENGE-$PASSWORD | uconv -f ASCII -t UTF16LE |md5sum|awk '{print $1}'`"
SID=`wget -q -O - "$HOST/login_sid.lua?sid=0000000000000000&username=$USERNAME&response=$CHALLENGE-$HASH"| sed -e 's/^.*<SID>//' -e 's/<\/SID>.*$//'`
# generate our upload request
BOUNDARY="---------------------------"`date +%Y%m%d%H%M%S`
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"sid\"\r\n\r\n$SID\r\n" >> $TMP
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"BoxCertPassword\"\r\n\r\n$CERTPASSWORD\r\n" >> $TMP
printf -- "--$BOUNDARY\r\n" >> $TMP
printf "Content-Disposition: form-data; name=\"BoxCertImportFile\"; filename=\"BoxCert.pem\"\r\n" >> $TMP
printf "Content-Type: application/octet-stream\r\n\r\n" >> $TMP
cat $CERTPATH/privkey.pem >> $TMP
cat $CERTPATH/fullchain.pem >> $TMP
printf "\r\n" >> $TMP
printf -- "--$BOUNDARY--" >> $TMP
# upload the certificate to the box
wget -q -O - $HOST/cgi-bin/firmwarecfg --header="Content-type: multipart/form-data boundary=$BOUNDARY" --post-file $TMP | grep SSL
# clean up
rm -f $TMP
USERNAME, PASSWORD sind abhängig von den Einstellungen der FB, klar.
Etwas Recherche ergab: CERTPATH ist in /usr/syno/etc/certificate/_archive/... (https://www.synology-forum.de/showthread.html?80821-SSL-Zertifikat-Speicherpfad)
Aus den Comments zum Link ergibt sich außerdem, dass in line 16 iconv zu uconv abgeändert werden soll.
Nur, wenn ich nun das Skript ausführe, ändert sich in der FB nichts.
Code:
@Diskstation:~$ sudo /usr/local/bin/fritzbox-cert-update.sh &
[1] 1402
@Diskstation:~$
Redirecting output to 'wget-log'.
Redirecting output to 'wget-log.1'.
Redirecting output to 'wget-log.2'.
Wenn das Skript läuft, soll es übrigens folgendermassen im Aufgabenplaner zusammen mit der Erneuerung des Zertifikats aufgerufen werden können
Code:
/usr/syno/sbin/syno-letsencrypt renew-all --renew-hook /usr/local/bin/fritz_lets_encrypt.sh
Vielleicht ist dieses Weg auch völlig überholt? Und Docker ist dafür mittlerweile zB dein Freund. Ich weiss es nicht. Klärt mich auf