使用自有網域申請 Let's Encrypt(不透過 QNAP Cloud)

我有自己的網域,而且我想要從Letsencrypt獲得證書,而不讓myqnapcloud介入。

一開始我嘗試在NAS前面放一個反向代理,但這結果導致qulog出現問題,於是我把它移除了。

接著,我直接安裝acme.sh,這看起來是可行的,以下是步驟:

# 取得你的DNS供應商的API key:這樣就不用開啟web伺服器來放驗證token了
# 用admin帳號ssh登入,切換到shell
cd /tmp
curl -L \
  https://github.com/acmesh-official/acme.sh/archive/master.tar.gz \
  -o acme.sh.tar.gz
tar -xvf acme.sh.tar.gz
cd acme.sh-master/
# home目錄可存活重啟/升級,不過任何分享資料夾也可以
mkdir /share/CACHEDEV1_DATA/homes/admin/acme.sh
./acme.sh --install \
  --home /share/CACHEDEV1_DATA/homes/admin/acme.sh \
  -m "youremail@example.org"
# acme安裝腳本會修改RAM中的crontab,要將改動持久化
crontab -l | grep acme.sh >> /etc/config/crontab
# 根據你的DNS伺服器調整,我這裡用的是OVH(預設)zone
export OVH_END_POINT="ovh-eu"
cd /share/CACHEDEV1_DATA/homes/admin/acme.sh/
./acme.sh --issue \
        --dns dns_ovh -d "yournas.yourdomain.com" \
        --reloadcmd "cat
/share/CACHEDEV1_DATA/homes/admin/acme.sh/yournas.yourdomain.com_ecc/yournas.yourdomain.com.key
/share/CACHEDEV1_DATA/homes/admin/acme.sh/yournas.yourdomain.com_ecc/fullchain.cer
> /etc/config/stunnel/stunnel.pem && /etc/init.d/stunnel.sh restart"

警示與備註:

  • 如果你比較喜歡用myqnapcloud而不是像我這樣動系統,那完全沒問題:這方法對我來說OK,但如果出問題你得自己收拾殘局 :wink:
  • 我不是用HTTP驗證,而是用DNS:查一下你自己的網域供應商API怎麼取得API key,然後搭配DNSAPI使用
  • 我的NAS沒有公開在網路上,我用本地的unbound安裝假造一個yournas.yourdomain.com條目,讓acme.sh以及本地客戶端都能運作
  • 已測試:可正常經過重開機、每日休眠/待命循環跟系統升級

我有點困惑。如果你的 NAS 沒有暴露在網路上,那憑證的目的到底是什麼?除非你是在「企業」環境下使用 NAS,有很多可能的使用者而且你想要一定程度的安全性,否則沒有必要在本地安裝憑證。

你使用憑證的原因是什麼?

舉個例子,戒掉接受自簽憑證的習慣。

學習新知,如另一個討論串中提到的,也算是動機……再加上,或許有其他人在某些場合真的需要這份簡短指南,不只是「有了更好」,也能受益。

謝謝你的分享!!!

如果 Let’s Encrypt 的功能能夠成為 QNAP 應用商店中的一個小應用,那就太好了。這樣整個流程就能自動化。我也沒有使用 myqnapcloud,所以如果能有一個只針對 Let’s Encrypt、不需要 myqnapcloud 的應用程式會很有用。