
網站都需要有一個安全憑證才可以有 https 的安全性連線,一直以來我都是用 acme.sh 在 Let’s Encrypt 申請憑證使用,也有寫一個 docker 容器和腳本專門定時處理這個任務(包含申請憑證、歸檔、轉成 PFX 供 Windows 使用、重啟各種服務…),但始終需要透過 DSM 網頁手動更換 NAS 的憑證,沒辦法和腳本一起自動更新。
憑證存放位置
在 Reddit 爬了一圈看到 這篇文章,稍作嘗試發現可行,然而我這邊遇到了一些問題,先附上指令。
Bash
sudo cp /path/to/cert/cert/fullchain.pem /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)/fullchain.pem
sudo cp /path/to/cert/cert/privkey.pem /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)/privkey.pem
sudo cp /path/to/cert/cert/cert.pem /usr/syno/etc/certificate/_archive/$(cat /usr/syno/etc/certificate/_archive/DEFAULT)/cert.pem/usr/syno/etc/certificate/_archive/ 存放所有的憑證檔案與資料。
$(cat /usr/syno/etc/certificate/_archive/DEFAULT) 可以輸出系統預設的憑證資料夾。
不過如果需要更新其它憑證,可以到 /usr/syno/etc/certificate/_archive/INFO 這個檔案中找到對應的憑證 ID。
/usr/syno/etc/certificate/_archive/INFO
{
"63xEdQ": {
"desc": "",
"services": [
{
"display_name": "LDAP Server",
"display_name_i18n": "SYNO.SDS.LDAP.AppInstance:app:displayname",
"isPkg": true,
"owner": "root",
"service": "slapd",
"subscriber": "DirectoryServer"
},
{
"display_name": "test.chuan0418.com:80/443",
"isPkg": true,
"multiple_cert": true,
"owner": "root",
"service": "073953b2-b81a-448f-ad88-732c715ec751",
"subscriber": "WebStation"
}, ...
],
"user_deletable": true
},
"Iw7gEv": {
"desc": "Synology QuickConnect Certificate",
"services": [
{
"display_name": "QuickConnect",
"display_name_i18n": "helptoc:quickconnect",
"isPkg": false,
"multiple_cert": true,
"owner": "root",
"service": "quickconnect",
"subscriber": "system",
"user_setable": false
}
],
"user_deletable": false
}
}其中,63xEdQ 和 Iw7gEv 就是憑證的 ID,對應到資料夾就是憑證檔案。所以你也可以替換 $(cat /usr/syno/etc/certificate/_archive/DEFAULT) 成為 Iw7gEv。
重啟服務
更新完憑證後需要重新編譯設定檔並重新啟動 nginx 服務,但我在實際使用時使用 restart 動作會卡很久,不過使用 reload 就可以解決了,秒殺。
Bash
sudo /usr/syno/bin/synow3tool --gen-all
sudo /usr/syno/bin/synosystemctl reload nginx