「SSL 憑證過期警告?」別再半夜被嚇醒!終極 Certbot 自動續期聖經,一勞永逸守護你的 WordPress 網站

2025/09/15 | 網站安全與防護

「SSL 憑證過期警告?」別再半夜被嚇醒!終極 Certbot 自動續期聖經,一勞永逸守護你的 WordPress 網站

哈囉,我是浪花科技的資深工程師 Eric。不知道你有沒有過這種經驗:某天早上悠閒地泡著咖啡,準備開始一天的工作,結果一封來自憑證頒發機構的 Email 跳出來,標題寫著「Your SSL certificate is expiring soon」,瞬間咖啡因都還沒起作用,冷汗就先流下來了。更慘的是,你可能完全忘了這件事,直到使用者回報網站出現「不安全」的警告,那才真的是災難現場。

坦白說,在 2024 年的今天,網站沒有 HTTPS 基本上就像是出門不穿衣服一樣,不僅讓使用者毫無信任感,Google 大神也會直接把你的 SEO 分數打入冷宮。幸運的是,我們有 Let’s Encrypt 這個佛心的非營利組織提供免費的 SSL 憑證,讓大家都能輕鬆上鎖。但問題來了,Let’s Encrypt 的憑證效期只有 90 天,這設計的初衷是為了推動自動化,而不是要你每三個月就手動更新一次。身為一個有點龜毛的工程師,任何需要「手動」、「記得」、「定期」處理的事情,都應該被自動化,這不僅是效率問題,更是可靠性的問題。

今天,我就要帶你徹底搞定 SSL / HTTPS 自動更新,我們的主角就是大名鼎鼎的 Certbot。這篇文章不只是教你複製貼上指令,我會帶你從原理到實戰,再到除錯,讓你真正搞懂這個工具,從此高枕無憂,再也不用擔心憑證過期的問題。

為什麼你該馬上拋棄手動更新 SSL 的壞習慣?

我知道,有些朋友可能會想:「不過就是三個月更新一次,設個行事曆提醒不就好了?」嗯,理論上是這樣沒錯,但實務上呢?

  • 人總會犯錯: 你可能剛好在休假、可能忙到忘了、可能提醒被淹沒在通知海裡。只要一次疏忽,你的網站就會立刻被打上「不安全」的標籤,流失的訂單和信任感可能遠超過你想像。
  • 過程繁瑣且無趣: 產生 CSR、驗證網域所有權、下載憑證、上傳到伺服器、重啟 Web Server… 這一連串操作不僅無聊,而且每次都要重複。工程師的寶貴時間應該花在創造價值,而不是做這些重複性的苦工。
  • 風險控管: 自動化流程是可預測、可測試、可監控的。手動操作則充滿了變數,你可能上傳錯憑證、可能設定檔改錯一個字,導致整個網站掛掉。何必呢?

Let’s Encrypt 的 90 天效期,本身就是一種「強迫」你擁抱自動化的機制。所以,別再掙扎了,讓我們一起把這件事做到「一次設定,終身受用」。

Certbot 核心原理剖析:它到底怎麼跟 Let’s Encrypt 溝通的?

在我們動手之前,先花個三分鐘了解一下 Certbot 運作的原理,這對你未來除錯非常有幫助。「知其然,知其所以然」是工程師的基本素養嘛!

Certbot 其實是一個遵循 ACME (Automatic Certificate Management Environment) 協議的客戶端軟體。簡單來說,整個流程像這樣:

  1. 發起請求: Certbot 向 Let’s Encrypt 的伺服器說:「嗨,我是 `yourdomain.com` 的管理員,我想申請一個 SSL 憑證。」
  2. 下達挑戰: Let’s Encrypt 伺服器回覆:「哦?你說你是就是?證明給我看。我現在給你一個隨機的 token,請你把它放到你的網站伺服器上某個指定的路徑下,讓我可以透過 HTTP 存取到。」(這就是最常見的 HTTP-01 挑戰
  3. 完成挑戰: Certbot 會自動在你的 Web Server(例如 Nginx 或 Apache)上建立一個臨時的檔案,裡面就包含了那個 token。
  4. 進行驗證: Let’s Encrypt 伺服器會真的去訪問 `http://yourdomain.com/.well-known/acme-challenge/<token>` 這個網址,確認能讀取到正確的內容。
  5. 核發憑證: 一旦驗證成功,Let’s Encrypt 就會相信你確實是這個網域的擁有者,然後就會簽發 SSL 憑證給你。Certbot 收到憑證後,會自動幫你安裝到 Web Server 的設定檔中,並重啟服務讓新憑證生效。

整個過程全自動,你幾乎感受不到它的存在。而「續期」的過程,其實就是重複上述流程。Certbot 的自動續期排程,通常建議在憑證到期前 30 天就開始嘗試,確保有足夠的時間應對突發狀況。

實戰教學:一步步設定 WordPress 網站的 Certbot 自動續期

好了,理論講完了,我們來動手實作吧!這裡我以最常見的 Linux 發行版 Ubuntu 搭配 Nginx 為例,如果你用的是 Apache 或其他系統,指令會稍有不同,但核心概念是完全一樣的。

第一步:安裝 Certbot 與對應的 Web Server 外掛

首先,你需要透過 SSH 登入你的伺服器。接著,我們來安裝 Certbot。官方建議使用 Snap 來安裝,可以確保版本是最新、最穩定的。

如果你的系統沒有 snapd,先安裝它:

sudo apt update
sudo apt install snapd

接著安裝 Certbot:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

因為我們要讓 Certbot 自動幫我們修改 Nginx 設定,所以還要安裝 Nginx 的外掛。不過,新版的 Certbot 通常會自動偵測,如果不行再手動安裝。

第二步:首次取得憑證並自動設定 Nginx

這是最神奇的一步。執行以下指令,記得把 `yourdomain.com` 和 `www.yourdomain.com` 換成你自己的網域名稱。

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

執行後,Certbot 會引導你完成幾個設定:

  • 輸入你的 Email: 用於接收緊急通知和憑證到期提醒(雖然我們設定了自動續期,但多個保險總是好的)。
  • 同意服務條款: 閱讀後輸入 `A` 同意。
  • 是否願意分享 Email: 可選,看你個人意願。

接著,Certbot 會掃描你的 Nginx 設定檔,找到對應的 `server` block,然後自動完成 ACME 挑戰、下載憑證,並修改你的 Nginx 設定檔,幫你加上 443 port 的 SSL 設定,甚至還會幫你設定好 HTTP 自動轉跳 HTTPS。完成後,它會自動重啟 Nginx。

就是這麼簡單!現在你用瀏覽器打開 `https://yourdomain.com`,應該就能看到那令人安心的鎖頭圖示了。

第三步:驗證自動續期是否正常運作

「可以動」跟「做得好」是兩回事。我們不能只是相信 Certbot 已經幫我們搞定了,還必須親手驗證一下自動續期排程有沒有正確設定。

當你透過 snap 安裝 Certbot 時,它會自動建立一個 systemd timer 來定期執行續期檢查。你可以用這個指令來查看:

sudo systemctl list-timers | grep certbot

你應該會看到類似 `certbot.timer` 的服務。這還不夠,我們要實際模擬一次續期過程,確保一切都沒問題。這時候就要用上 Certbot 的神器指令 `dry-run`(乾跑、模擬運行):

sudo certbot renew --dry-run

這個指令會完整地跑一次續期的所有流程,但它會使用 Let’s Encrypt 的「測試」伺服器,所以不會真的去申請新的憑證,也不會影響到你現有的憑證。這是個非常安全的測試方式,你可以在不觸發請求頻率限制(Rate Limits)的情況下,確認防火牆、Web Server 設定、檔案權限等都是正常的。

如果最後你看到 `Congratulations, all simulated renewals succeeded.` 的訊息,恭喜你!你的 SSL / HTTPS 自動更新 已經大功告成。從此以後,Certbot 就會像個忠實的僕人,默默地在背景幫你搞定一切。

工程師的除錯筆記:當 Certbot 自動續期失敗時

自動化系統雖好,但總有意外。如果某天你收到憑證續期失敗的通知,或是 `dry-run` 就不通過,別慌,九成是以下幾個問題:

  • 防火牆阻擋: HTTP-01 挑戰需要讓 Let’s Encrypt 伺服器能透過 80 port 存取你的主機。請確認你的伺服器防火牆(如 ufw)或雲端服務商的安全群組(Security Group)規則,是否有開放 80 port 的傳入連線。
  • Web Server 設定錯誤: Certbot 是透過你 Nginx/Apache 設定檔中的 `server_name` 或 `ServerName` 來找到對應的網站。如果你的設定檔寫錯了,或是 DNS 解析還沒生效,Certbot 就會找不到路,導致驗證失敗。
  • 檔案權限問題: Certbot 需要權限在 `/var/www/html` 或其他你設定的網站根目錄下建立 `.well-known` 資料夾來放置驗證檔案。如果權限不對,就會寫入失敗。
  • 奇怪的重新導向: 如果你設定了某些全域的 301/302 重新導向規則,可能會干擾到 ACME 挑戰的驗證路徑,導致 Let’s Encrypt 找不到驗證檔案。

遇到問題時,最好的朋友就是 Log 檔案,通常位於 `/var/log/letsencrypt/letsencrypt.log`。仔細閱讀裡面的錯誤訊息,通常都能找到問題的蛛絲馬跡。

總結:擁抱自動化,專注於更有價值的事

搞定 Certbot 的自動續期,不僅僅是解決了一個技術問題,它更代表了一種工程師的思維模式:將重複、繁瑣、易錯的工作交給機器,讓我們能專注在更有創造力、更能產生商業價值的地方。

從今天起,別再為了 SSL 憑證即將到期而焦慮了。花個半小時,跟著這篇教學把 Certbot 設定好,你就能一勞永逸地解決這個問題,讓你的 WordPress 網站永遠保持在最安全、最值得信賴的狀態。

當然,伺服器維運的學問博大精深,如果你在設定過程中遇到任何棘手的問題,或是希望有專業團隊為你的網站架構、安全性、效能做一次完整的健檢與優化,浪花科技的團隊隨時準備好為你服務。

推薦閱讀

👉 立即聯繫浪花科技,讓我們成為你最強大的技術後盾,一同打造更安全、更高效的網站!

常見問題 (FAQ)

Q1: Certbot 和 Let’s Encrypt 是完全免費的嗎?

是的,完全免費。Let’s Encrypt 是一個由非營利組織 ISRG 運營的憑證頒發機構 (CA),致力於推動全球網站的 HTTPS 化。Certbot 則是推薦用來與 Let’s Encrypt 互動的開源軟體,也是免費的。你不需要為 SSL 憑證本身支付任何費用。

Q2: 憑證多久會自動更新一次?我需要手動介入嗎?

Let’s Encrypt 憑證的有效期為 90 天。Certbot 的自動續期腳本通常設定為每天執行兩次,它會檢查所有憑證的剩餘效期。當效期少於 30 天時,Certbot 就會自動嘗試續期。所以,一旦你成功設定好,就完全不需要手動介入,它可以全自動運行。

Q3: 如果我有好幾個子網域 (Subdomain),Certbot 也能處理嗎?

絕對可以。你可以在申請憑證時,透過 `-d` 參數指定多個網域名稱,例如:`sudo certbot –nginx -d example.com -d www.example.com -d blog.example.com`。Certbot 會為你申請一張包含所有這些網域的 SAN (Subject Alternative Name) 憑證,一次搞定。續期時也會一併更新所有網域。

Q4: `certbot renew –dry-run` 模擬測試失敗了怎麼辦?

模擬測試失敗是找出問題的好機會!首先,不要慌張,因為這不會影響你正在運作中的正式憑證。請仔細閱讀終端機輸出的錯誤訊息,它通常會明確指出問題所在。常見原因包括:無法連接到你的伺服器(檢查防火牆 Port 80)、DNS 解析問題、Web Server 設定檔錯誤、或是檔案權限不足。你可以根據錯誤訊息,逐一排查我們在文章中提到的「除錯筆記」內的項目。

 
立即諮詢,索取免費1年網站保固