讓 Synology NAS 也使用遠端主機上的 wildcard SSL 憑證

2021.10.31 更新:DSM 7 排程指令有變,只需要修改排程最後一行就可。

2020.03.21 更新:之前的教學沒有把 SSL 證書安裝到 NAS 的 nginx 上,會導致讀到舊的證書而失效,目前已更正。

目前,我的 linode 主機裡面的所有子網域(*.hiraku.tw)都已經使用了 Let's Encrypt 的 Wildcard SSL 憑證。

不過由於有一個子網域是指向我放在家裡的 Synology NAS,在 DSM 系統裡面雖然也可以取得 Let's Encrypt 憑證,但是目前並不能獲得 Wildcard 憑證。而我在 NAS 上面因為架設了一些服務,導致連到這台 NAS 的子網域越來越多,每個網域都去要一次憑證實在很麻煩,也有可能不小心達到 Let's Encrypt 的要求次數上限,所以就研究出了一個把 linode 主機上的憑證複製到 NAS 來使用的方法。

 

首先,你要先下載遠端主機的 Wildcard 憑證到電腦中。因為每個人儲存憑證的位置都不一樣,所以這邊請務必換成你的路徑,以我來說,我下載了 /etc/nginx/ssl/hiraku.tw/fullchain.cer/etc/nginx/ssl/hiraku.tw/private.key 這兩個檔案。

接下來到 DSM 的「控制台 → 安全性 → 憑證」裡面,選擇「新增 → 新增憑證 → 匯入憑證」,會出現如下圖畫面,選擇剛剛下載的兩個檔案並對應到正確的選項,再按確定。

 

這時候我們就成功匯入遠端主機中的 SSL 憑證了。

不過這樣的話,由於 Let's Encrypt 每 90 天就會過期一次,要常常匯入實在很麻煩,所以接下來,我們要讓 NAS 可以自動抓取遠端主機的憑證。

 

首先,我們一定要先把剛剛匯入的憑證,在 DSM 的視窗裡面改為「預設憑證」,才可以進行接下來的動作。

接著,你的 DSM 必須要可以用 SSH 進入,還有必須要用 root 帳號進去 SSH。要如何用 root 登入 NAS 的 SSH 請看官方教學。用 root 登入後,我們先下指令 mkdir /root/.ssh,接著打開你的「電腦」的終端機,產生新的 SSH key。產生方式依照電腦作業系統有所不同,這部分也請去看其他網站的教學。之後,我們把建立的 key(id_rsa、id_rsa.pub)放到 NAS 的 /root/.ssh 底下。(溫馨提醒:NAS 裡面可以用 vim,可以直接貼上內容存檔...),接著下指令 chmod -R 600 /root/.ssh,再下指令 cat /root/.ssh/id_rsa.pub,把出現的內容複製到遠端 linux 主機的 authorized_keys 裡面。

以上簡單來說,就是你要讓你的 NAS 建立 SSH key 並且讓它可以免密碼連到遠端主機就是了啦!弄好之後記得在 NAS 裡面測試一下是否真的能 SSH 連上遠端主機。

 

接下來,請在 NAS 的終端機裡面下指令 hash=$(cat "/usr/syno/etc/certificate/_archive/DEFAULT"),跟 folder="/usr/syno/etc/certificate/_archive/"$hash,這兩個指令第一個是獲得預設憑證的資料夾名稱,第二個指令就是獲得預設憑證的完整資料夾位置。

ls $folder 一下,會發現有三個檔案,cert.pem、fullchain.pem、privkey.pem,明明剛剛我們只有匯入兩個檔案啊!不過其實 cert.pem 跟 fullchain.pem 是完全一樣內容的,所以實際上還是只有兩個檔案。

再分別下指令

帳號跟網址自己換成你自己的,要注意的是,遠端的 private.key 在 NAS 應該要叫 privkey.pem,遠端的 fullchain.cer 在 NAS 要叫 fullchain.pem,並且複製一份叫 cert.pem。確定可以 scp 成功之後,最後我們要做自動化。

 

回到 DSM 的介面,選擇「控制台 → 任務排程表 → 新增 → 排程任務 → 使用者定義指令碼」,帳號選擇 root,排程時間自己設定,重點是指令碼,請改成

網址、路徑一樣要改成你自己的,儲存指令後馬上執行,如發現檔案有更新成功,那就 OK 了!

以上就是在 NAS 硬用遠端 linux wildcard SSL 憑證並自動更新的方法。

6 則留言

  1. 「光廷」的個人頭像
    光廷

    現在弄好了,檔案確定有更新進去了,連線進去憑證還是讀取到舊的,不曉得是什麼問題。

    1. 「Hiraku」的個人頭像
      Hiraku

      NAS 重開一下看會不會更新

    2. 「光廷」的個人頭像
      光廷

      後來全部重弄就抓到新的了!感謝。

  2. 「橘子」的個人頭像
    橘子

    synosystemctl restart nginx,這個指令目前還OK嗎? 總覺得每次跑完都要重新開機,NAS才會抓到新的憑證

    1. 「Hiraku」的個人頭像
      Hiraku

      用很久了,這個指令沒問題

  3. 「黃大丙」的個人頭像
    黃大丙

    謝謝分享,寫得很詳細。
    網路上看到一個不用重啟nginx的指令
    synow3tool --gen-all && systemctl reload nginx
    來源
    https://github.com/andyzhshg/syno-acme/issues/66

發佈留言