自動更新 Linode Object Storage SSL/TLS憑證

前一篇文章,我們了解了如何自訂Linode Object Storage的網域,但因Object Storage需要自己手動上傳SSL憑證,且Let’s Encrypt的憑證90天會到期,因此每到即將過期的時間,勢必就得再手動更新一次。因此,這篇就要繼續來了解,如何自動更新憑證。

首先,我們上次安裝的certbot,會自動排程更新憑證,確保憑證不會過期。不過因為我們設定手動的關係,還需要將驗證用的challenge上傳到bucket。所以,我們要做的就是,當certbot更新時將challenge上傳到對應的bucket,certbot更新後移除challenge,接著將更新後的 fullchain.pem 與 private.pem 透過Linode的API重新上傳到Linode。

我寫了一個nodejs的小工具,來專門處理這件事情。在開始之前,先用 node -v 確認一下是否有安裝 nodejs 並且版本 > 16.20。

  1. 請在之前的教學中,安裝了certbot的那台機器中的 /var/www目錄中clone我的這個repo,執行:git clone git@github.com:boggyjan/linode-object-storage-cert-updater.git
  2. 接著進入linode-object-storage-cert-updater目錄,執行:npm i,安裝相依套件
  3. 複製sample config成為真正的config:
    • 執行:cp updater.config.js.sample updater.config.js
  4. 修改 updater.config.js
    • 填入Linode API Token,可到這裡新增
    • 填入ObjectStorage的AccessKey與SecretKey,可到這裡新增
    • 在certs陣列裡修改成你的 region, bucket名稱,以及這台機器中存放憑證的地方 certPath
    • 範例中為兩個bucket,可視需求新增或移除
    • 下方的 telegramBotToken 與 myTelegramId 則為選填項目。若您想透過 Telegram 來回報更新情況,可以透過 Telegrame 的 BotFather 新增一個 bot,並在 config 中填寫你新增的 bot 的 token,並透過 telegram 的 userinfobot 取得你自己的 ID,並在config 中填寫你的 ID,這樣每當在更新 cert 時便會回報各個階段執行的情況。
  5. 到 /etc/letsencrypt/renewal/ 更新你的renewal config
    • 新增以下三行
      • server = https://acme-v02.api.letsencrypt.org/directory
      • manual_auth_hook = /var/www/linode-object-storage-cert-updater/challenge_upload.sh
      • manual_cleanup_hook = /var/www/linode-object-storage-cert-updater/challenge_remove.sh
    • 如果你使用不同的目錄,記得改成你的目錄(challenge_remove.sh and challenge_upload.sh 這兩個檔案裡的node /var/www/linode-object-storage-cert-updater/ 這邊的目錄也要改)
  6. 完成

參考資料

在〈自動更新 Linode Object Storage SSL/TLS憑證〉中有 1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料