自動更新 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。

請在之前的教學中,安裝了certbot的那台機器中的 /var/www目錄中clone我的這個repo,執行:git clone git@github.com:boggyjan/linode-object-storage-cert-updater.git

接著進入linode-object-storage-cert-updater目錄,執行:npm i,安裝相依套件。安裝完成後,請完成下面三個步驟:

  1. 複製sample config成為真正的config:
    • 執行:cp updater.config.js.sample updater.config.js
  2. 修改 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 時便會回報各個階段執行的情況。
  3. 到 /etc/letsencrypt/renewal/ 更新你的renewal config,新增以下3行:
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
post_hook = /var/www/linode-object-storage-cert-updater/upload_certs.sh type.your.domain.here (type.your.domain.here 換成你的domain)

如果你使用不同的目錄,記得改成你的目錄(challenge_remove.sh, challenge_upload.sh, upload_certs.sh 這三個檔案裡的node /var/www/linode-object-storage-cert-updater/ 這邊的目錄也要改)

以上步驟完成後,就可以用 sudo certbot renew –dry-run 測試看看有沒有更新,沒有問題的話,可以在次月同日檢查一下有沒有更新。

參考資料

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

發佈留言

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

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