2024年1月11日 星期四

Synology NAS 使用 Private IP, 自訂網域 與 Wildcard SSL 來提供 HTTPS 服務並完成憑證定期更新與設定 @ DSM 7.2.1, DS723+

之前已經處理過 DS216play 的情況,撰寫過兩篇筆記:

這次在處理 DS723+ / DSM 7.2.1 時,有在追細一點,但整體上的流程 2022年的那篇只做了一半,他並沒有做到自動更新,而當時追的時候也沒追清楚。

簡略的流程:
  1. 參考 2022年的方式,先透過 acme.sh 產出憑證(例如用 Cloudflare 維護 DNS record 時,可以輕鬆呼叫 Cloudflare API 完成 txt record 更新),接著到 Synology 網頁管理 -> 控制台 -> 連線能力 -> 憑證 -> 新增 -> 新增憑證 -> 匯入憑證
  2. 這時匯入完畢後,其實在系統底層可以看到資訊,我原先在 2022年那篇誤認為 /usr/syno/etc/www/certificate/system_default/cert.conf 的描述位置(因為從 Nginx 設定檔有關),細追後,發現真正的位置在 /usr/syno/etc/certificate/_archive/ 某個目錄內
    • 用 cat /usr/syno/etc/certificate/_archive/INFO 可以看到你自己上傳的憑證,假設是在 /usr/syno/etc/certificate/MySelf 這目錄,內有 cert.pem, chain.pem, fullchain.pem, privkey.pem
  3. 這時若把 acme.sh 安置好,可以在 Synology NAS 內某個使用者的家目錄運行,那在他家目錄中就會有 ~/.acme.sh/*.YourDomain_ecc/ 這類位置,內有 ca.cer, '*.YourDomain.cer', '*.YourDomain.key', 'fullchain.cer' 和 '*.YourDomain.pkcs8',這時,就要把 /usr/syno/etc/certificate/MySelf 內的完成同步更新,例如使用 symbolic link 
  4. 後續,就回到 Synology 網頁介面 -> 控制台 -> 任務排程表 -> 新增一則任務並使用 root 權限 -> 設定每月執行一次 -> 在使用者定義指令碼那邊,可以直接呼叫 script (例如包裝成 renew-ssl.sh)在指定使用者家目錄完成憑證更新、接著在把 nginx reload
    • sudo -u YourNASUser bash /var/services/homes/YourNASUser/renew-ssl.sh
    • sudo nginx -t && sudo synopkg restart --service nginx && sudo synosystemctl reload nginx
目前看來,在 (2) 那邊找到的實際儲存位置時,透過 symbolic link 改到取 (3) 的資料,如此在控制台憑證列表可以立即觀看到 acme.sh renew 後的延長期限數字,這邊有提到 '*.YourDomain.pkcs8' 檔案格式,是跟 Synology NAS 使用的格式有關,他在呼叫 acme.sh renew 時,可以多添加 --to-pkcs8 參數來產生。


現況應當還有個隱憂,那就是 /usr/syno/etc/certificate/MySelf/*.pem 可完成自動更新,那 nginx 設定取得的憑證資訊是否也會更新?目前推猜好像不是同步的,且更新時機也還不明,只能等下個期週期後再來看看了。暫時推論是在設定憑證的系統預設時,才從 /usr/syno/etc/certificate/MySelf/*.pem 複製到 /usr/syno/etc/www/certificate/system_default/ 使用

沒有留言:

張貼留言