之前在 2018 年已經寫過一篇:[NAS] Private IP Server 與 Let's Encrypt Wildcard SSL 憑證 / HTTPS 服務,那時是採用 Let's Encrypt Wildcard SSL 憑證,主因是只有 Private IP 的 NAS Server ,無法讓憑證服務連進來驗證 IP 與 Domain 的關係,因此主要都是靠 DNS Record (TXT Record) 的驗證方式。
然而,忘了是何時開始,原本設定好的 acme.sh 跟連續動作 script 失效好一陣子,後來才發現在 2021.08.01 起,預設已經改成 ZeroSSL 方案,所以要處理創帳號的部分:
$ ~/.acme.sh/acme.sh --upgrade$ ~/.acme.sh/acme.sh --register-account -m YOUR_EMAIL[Sun May 22 13:26:39 CST 2022] No EAB credentials found for ZeroSSL, let's get one[Sun May 22 13:26:41 CST 2022] Registering account: https://acme.zerossl.com/v2/DV90[Sun May 22 13:26:55 CST 2022] Registered[Sun May 22 13:26:55 CST 2022] ACCOUNT_THUMBPRINT='XXXXXXXXXXXXXXXXXXXXXXX'
運行:
$ CF_Key=YOUR_KEY CF_Email=YOUR_EMAIL ~/.acme.sh/acme.sh --issue --dns dns_cf -d *.YOUR_DOMAIN
如此,在 ~/.acme.sh\*.YOUR_DOMAIN/ 中,會有:
- ~/.acme.sh\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.cer
- ~/.acme.sh\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.key
- ~/.acme.sh\*.YOUR_DOMAIN/ca.cer
- ~/.acme.sh\*.YOUR_DOMAIN/fullchain.cer
接著把這些 copy 出來,直接到 NAS DSM7.1 網頁介面匯入
控制台 -> 安全性 -> 憑證 -> 新增 -> 匯入憑證 ->私鑰: Your cert key - \*.YOUR_DOMAIN.key憑證: Your cert - \*.YOUR_DOMAIN.cer中繼憑證: ca.cer
控制台 -> 安全性 -> 憑證 -> 設定 -> 系統預設 -> 更換成剛剛上傳的憑證(如 *.YOUR_DOMAIN)
如此,再去系統 /usr/syno/etc/www/certificate/system_default/cert.conf 查一下資訊,可以看到寫死的憑證位置,未來就可以靠手段去覆蓋掉。
取代掉 ssl_certificate 欄位,如 /usr/syno/etc/www/certificate/system_default/XXX-SC-XXX.pem;
$ cat ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.cer ~/.acme.sh/\*.YOUR_DOMAIN/ca.cer > ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.fullchain.pem$ sudo cp ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.fullchain.pem /usr/syno/etc/www/certificate/system_default/XXX-SC-XXX.pem;
取代掉 ssl_certificate_key,如 /usr/syno/etc/www/certificate/system_default/XXX-SCK-XXX.pem;
$ openssl pkcs8 -topk8 -inform pem -in ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.key -outform pem -nocrypt -out ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.key.pem$ sudo cp ~/.acme.sh/\*.YOUR_DOMAIN/\*.YOUR_DOMAIN.key.pem /usr/syno/etc/www/certificate/system_default/XXX-SCK-XXX.pem;
測試與重啟 Nginx
$ sudo nginx -t && sudo synopkg restart --service nginx
上述的任務都可以擠在一個 script 中,再靠 NAS Web UI 設定定期跑,而 NAS 只需在 Web UI 上設定好一次使用指定的憑證資訊後,後續就可以靠系統底層不斷覆蓋重啟 nginx 方式來處理,像是有需要的話,也可以靠 gawk 去動態取出 ssl_certificate_key 和 ssl_certificate 的位置
ssl_certificate_path=`sudo grep "ssl_certificate " /usr/syno/etc/www/certificate/system_default/cert.conf | gawk -F';' '{print $1}' | gawk -F' ' '{print $2}'`
ssl_certificate_key_path=`sudo grep "ssl_certificate_key " /usr/syno/etc/www/certificate/system_default/cert.conf | gawk -F';' '{print $1}' | gawk -F' ' '{print $2}'`
echo "ssl_certificate_path: $ssl_certificate_path"
echo "ssl_certificate_key_path: $ssl_certificate_key_path"
ref:
- https://github.com/acmesh-official/acme.sh/wiki/Change-default-CA-to-ZeroSSL
- https://github.com/acmesh-official/acme.sh
- DS216play / DSM 7.1
- /etc/nginx/nginx.conf
- /usr/syno/etc/www/certificate/system_default/cert.conf
沒有留言:
張貼留言