我的 NAS 是幾年前買的 Synology DS216play ,他的 CPU 挺麻煩的,讓我額外安裝軟體都很不便利,原先想採用 certbot 來做事,安裝了 python3、pip 和 virtualenv 後,最後還是卡關,卡在安裝軟體還需要 compiler 來編譯,擺爛三個月後,我改用了 https://github.com/Neilpang/acme.sh
acme.sh 的使用很方便:
$ wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/acme.sh
$ chmod a+x acme.sh
$ ~/acme.sh --issue -d *.changyy.org --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
如此後續再添加 TXT record 後,在執行
$ ~/acme.sh --renew -d *.changyy.org --dns --yes-I-know-dns-manual-mode-enough-go-ahead-please
就搞定了!剩下的步驟只是覆蓋憑證檔案跟重啟 web server :
$ grep certificate /etc/nginx/nginx.conf
ssl_certificate /usr/syno/etc/certificate/system/default/fullchain.pem;
ssl_certificate_key /usr/syno/etc/certificate/system/default/privkey.pem;
$ ls /usr/syno/etc/certificate/system/default/
cert.pem chain.pem fullchain.pem privkey.pem
最後,我把 DNS 擺在 cloudflare 託管,還可以用 API 去處理 DNS TXT Record 更新,連續動作如下:
$ ls ~/.acme.sh/
$ wget https://raw.githubusercontent.com/Neilpang/acme.sh/master/dnsapi/dns_cf.sh -O ~/.acme.sh/dns_cf.sh
$ chmod 755 ~/.acme.sh/dns_cf.sh
$ CF_Key=YOUR_API_KEY_AT_PROFILE CF_Email=YOUR_CLOUDFLARE_EMAIL_ACCOUNT ~/acme.sh --issue --dns dns_cf -d *.changyy.org
$ sudo cp ~/.acme.sh/\*.changyy.org/\*.changyy.org.cer /usr/syno/etc/certificate/system/default/cert.pem
$ sudo cp ~/.acme.sh/\*.changyy.org/\*.changyy.org.key /usr/syno/etc/certificate/system/default/privkey.pem
$ sudo cp ~/.acme.sh/\*.changyy.org/ca.cer /usr/syno/etc/certificate/system/default/chain.pem
$ sudo cp ~/.acme.sh/\*.changyy.org/fullchain.cer /usr/syno/etc/certificate/system/default/fullchain.pem
$ sudo synoservicecfg --restart nginx
如此一來,就可以安排 crontab 用 root 每月跑一次了,另一個好處是可以在 NAS 執行完,再把憑證丟到一些 VPS 維運的機器上
# cat /root/lets-ssl-renew.sh
#!/bin/sh
CF_Key=YOUR_API_KEY_AT_PROFILE CF_Email=YOUR_CLOUDFLARE_EMAIL_ACCOUNT /root/acme.sh --issue --dns dns_cf -d *.changyy.org && cp /root/.acme.sh/\*.changyy.org/\*.changyy.org.cer /usr/syno/etc/certificate/system/default/cert.pem && cp /root/.acme.sh/\*.changyy.org/\*.changyy.org.key /usr/syno/etc/certificate/system/default/privkey.pem && cp /root/.acme.sh/\*.changyy.org/ca.cer /usr/syno/etc/certificate/system/default/chain.pem && cp /root/.acme.sh/\*.changyy.org/fullchain.cer /usr/syno/etc/certificate/system/default/fullchain.pem && synoservicecfg --restart nginx && echo "SSL-Renew-Done" > /root/ssl-renew.log || echo "SSL-Renew-Failed" > /root/ssl-renew.log
echo date >> /root/ssl-renew.log
沒有留言:
張貼留言