Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
昨天在執行 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
便沒有出現錯誤訊息了。
手動設定組態檔後,發現 Webinoly 在執行自動更新時,仍然會出現一樣的錯誤。這是因為在手動的過程中,我並未紀錄自己移動了哪些檔案,導致組態檔實際上並沒有跟著更新。
結果,在偵錯過程中,嘗試要從頭開始執行一次 Let’s Encrypt 的憑證簽發流程,但是已經無法透過 Webinoly 內建的指令解決。
sudo site huanyichuang.com -ssl=off -revoke=on
在正常的情況下,上述的指令會關閉 SSL,並撤銷原本的憑證。然而原始的憑證已經過期 (組態檔所偵測到的憑證是最舊的 2020 年版本),因此 -revoke=on
的指令無法使用。
要解決這個問題,可以直接回到 certbot
這套軟體中刪除相關組態。
由於 Webinoly 本身屬於堆疊指令碼 (stack scripts) 工具,是將個別套件的指令碼編排後自動執行,因此如果遇到無法直接透過 Webinoly 指令解決的問題,仍然可以回到個別套件本身的指令進行處理。
certbot certificates
接著便會列出目前主機中所有的憑證。
接著將舊的憑證刪除:
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,便可以讓組態檔正常運作了。