Physical Address

304 North Cardinal St.
Dorchester Center, MA 02124

Certbot 更新失敗 Missing command line flag or config entry for this setting

昨天在執行 Webinoly 的 SSL 更新語法 sudo site -ssl=renew 時,出現了以下錯誤:

Attempting to renew cert (huanyichuang.com) from /path/to/renewal/huanyichuang.com.conf produced an unexpected error: Missing command line flag or config entry for this setting:
Select the webroot for huanyichuang.com:
Choices: ['Enter a new webroot', '/path/to/webroot/']

(You can set this with the --webroot-path flag). Skipping.

後來上網找到這篇討論,暫時先透過手動的方式解決這個問題。

進一步了解後,發現是組態檔 /path/to/renewal/huanyichuang.com.conf 中的問題:

[renewalparams]
account = {{account}}
must_staple = True
authenticator = webroot
webroot = /path/to/webroot/
server = https://acme-v02.api.letsencrypt.org/directory
[[webroot_map]]
huanyichuang.com = /path/to/webroot/

根據這篇討論,應該要透過下方 [[webroot_map]] 來比對網站的根目錄,因此看起來 [renewalparams] 中的 webroot 屬性是造成的錯誤的來源。將之刪除後,重新執行 sudo site -ssl=renew 便沒有出現錯誤訊息了。

手動更改組態後造成無法自動更新 (2021.3.20 更新)

手動設定組態檔後,發現 Webinoly 在執行自動更新時,仍然會出現一樣的錯誤。這是因為在手動的過程中,我並未紀錄自己移動了哪些檔案,導致組態檔實際上並沒有跟著更新。

結果,在偵錯過程中,嘗試要從頭開始執行一次 Let’s Encrypt 的憑證簽發流程,但是已經無法透過 Webinoly 內建的指令解決。

sudo site huanyichuang.com -ssl=off -revoke=on

在正常的情況下,上述的指令會關閉 SSL,並撤銷原本的憑證。然而原始的憑證已經過期 (組態檔所偵測到的憑證是最舊的 2020 年版本),因此 -revoke=on 的指令無法使用。

要解決這個問題,可以直接回到 certbot 這套軟體中刪除相關組態。

由於 Webinoly 本身屬於堆疊指令碼 (stack scripts) 工具,是將個別套件的指令碼編排後自動執行,因此如果遇到無法直接透過 Webinoly 指令解決的問題,仍然可以回到個別套件本身的指令進行處理。

刪除原本的憑證

certbot certificates

接著便會列出目前主機中所有的憑證。

顯示目前有的 SSL 憑證

接著將舊的憑證刪除:

sudo certbot delete --cert-name huanyichuang.com

這時候再執行一次 sudo site huanyichuang.com -ssl=on 時,系統會顯示 SSL is already enabled for your site - huanyichuang.com,但實際上還是並沒有生成新的憑證。

因此決定透過 Certbot 來重新簽發新的憑證。

sudo certbot certonly

接著便按照程式的引導完成憑證簽發。

Saving debug log to /var/log/letsencrypt/letsencrypt.log

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
# 選擇 2,透過根目錄的 .well-known 進行驗證

Plugins selected: Authenticator webroot, Installer None
Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): huanyichuang.com

# 輸入要簽發的網域名稱,這邊以 huanyichuang.com 為例。
# 如果需要簽發多個網域 (例如 www) 則需用空白或逗號區隔。

Input the webroot for huanyichuang.com: (Enter 'c' to cancel): /var/www/huanyichuang.com/htdocs
# 輸入路徑

Waiting for verification...
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for huanyichuang.com
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/huanyichuang.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/huanyichuang.com/privkey.pem
   Your cert will expire on 2021-06-18. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

接著回到 Nginx 的組態檔設定 SSL 的接聽程式 (listener) 後,重啟 Nginx,便可以讓組態檔正常運作了。

Eric Chuang
Eric Chuang

正職是廣告行銷人員,因為 Google Tag Manager 的關係開始踏入網站製作的領域,進一步把 WordPress 當成 PHP + HTML + CSS + JavaScript 的學習教材。此外,因為工作的關係,曾經用 Automattic 的 Underscores (_s) 替客戶與公司官網進行全客製化佈景主題開發。

發佈留言

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

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