SSH 替換 Synology NAS 網頁憑證

網站都需要有一個安全憑證才可以有 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
  }
}

其中,63xEdQIw7gEv 就是憑證的 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

留言