證書管理與自動更新設置
1. 檢查目前的證書
指令 certbot certificates
我們先從簡單的開始:如何知道您的伺服器上已經安裝了哪些證書?Let's Encrypt 提供了一個很好用的工具 — certbot
。使用指令 certbot certificates
,可以獲取目前證書的詳細資訊。
sudo certbot certificates
執行後,你會看到類似以下的內容:
Found the following certs:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2023-12-31 10:00:00+00:00 (VALID: 89 days)
Certificate Path: /etc/letsencrypt/live/example.com/fullchain.pem
Private Key Path: /etc/letsencrypt/live/example.com/privkey.pem
這裡包含了一些重要細節:
- 證書名稱。
- 證書涵蓋的域名。
- 到期日期(方便您及時更新)。
- 證書文件和私鑰的路徑。
實用的小技巧:
如果您習慣忽略到期通知,那麼這個指令就是您的最佳夥伴。畢竟,沒人想成為那個從憤怒用戶那裡才知道證書已經過期的工程師。
2. 證書的自動更新
Let's Encrypt的內部運作
Let's Encrypt的證書有效期是90天,這樣能最大程度降低安全風險。但每3個月手動更新一次這事實在是太繁瑣了。好在可以使用內建的指令實現自動化:
sudo certbot renew
此過程會檢查所有的證書,並自動更新那些即將到期的證書。
通過Cron
設置自動更新
Cron
是在Linux中內建的任務排程工具。它會按照設定的時間執行命令,我們正好可以利用它來自動化證書更新。以下是如何用Cron設置更新:
打開當前用戶的
Cron
編輯器:sudo crontab -e
在文件末尾添加以下行:
0 0 * * * certbot renew --quiet
該命令會在每天午夜時運行
certbot renew
。--quiet
標誌會抑制不必要的輸出,因此更新會默默地進行,不會打擾到任何人。保存更改並退出編輯器。
現在你的伺服器會自動更新證書,再也不用擔心它們會過期了(或幾乎不用)。
3. 手動更新證書
有時候自動化無法解決所有問題,還是需要手動更新證書。例如,當你剛剛在網站配置中新增了一個域名的時候,就必須手動請求新的證書。這時候又可以用到 certbot
:
命令範例:
sudo certbot renew
為特定域名更新證書
如果你需要更新與某個特定域名相關的證書,可以使用以下格式的請求:
sudo certbot certonly --nginx -d example.com -d www.example.com
這裡:
--nginx
指定配置會自動套用到Nginx服務器。對於Apache服務器,使用--apache
。- 標誌
-d
列出需要生成證書的域名。
執行命令後,Certbot會檢查服務器配置,請求新的證書並進行設置。
4. 通知和監控
Email 通知
安裝 Certbot 時,它會請求你的 email 地址。如果你填了,系統會在憑證到期前 20 天發送通知。如果你沒填或者想更換 email,可以這麼做:
sudo certbot register --update-registration --email newaddress@example.com
這樣就不會有突發情況了。嗯,幾乎不會。
外部檢查
有一些第三方服務可以幫助你追踪憑證的有效期。例如,SSL Labs。只需輸入網站地址,該服務就會檢查它的憑證,包括有效期、信任鏈和安全等級。
5. 刪除不需要的證書
有時舊的證書會變得不再需要,比如當你停止維護某個域名的時候。為了避免系統中堆積垃圾,最好把它們刪掉。
刪除的命令:
sudo certbot delete
Certbot 會顯示可用的證書列表,並讓你選擇要刪除哪一個。
有用的小建議:
刪除證書時要小心,避免意外讓正在運行的網站停止工作。一定要確認該證書不再被任何地方使用。
6. 示例和錯誤調試
更新後的檢查
每次對憑證進行更改或更新後,都應該檢查網站是否正常運行。最簡單的方法是使用 curl
:
curl -I https://example.com
預期結果 — 代碼 HTTP/1.1 200 OK
。
如果出現問題,第一時間查看日誌:
對於 Nginx:
sudo tail -f /var/log/nginx/error.log
對於 Apache:
sudo tail -f /var/log/apache2/error.log
常見錯誤: "Too Many Requests"
如果你太頻繁地請求新的憑證,Let's Encrypt 可能會因 "Too Many Requests" 錯誤阻止你的訪問。在這種情況下,建議使用 Let's Encrypt 的測試伺服器:
sudo certbot certonly --test-cert --nginx -d example.com
此命令將生成一個測試憑證,它無法用於實際用途,但可以幫助檢查配置。
7. 最後一步:自動重啟網頁伺服器
Let's Encrypt 更新了證書檔案,但是 Nginx 或 Apache 這些網頁伺服器不會注意到變更,除非你重啟它們。這也可以自動化。更新 Cron 設定:
0 0 * * * certbot renew --quiet && systemctl reload nginx
或者對於 Apache:
0 0 * * * certbot renew --quiet && systemctl reload apache2
現在,任何更新的證書都會立即應用到伺服器上。
這堂課的目標是讓你夜晚能睡得安穩,因為你知道你的證書會自動更新,網站也受到保護,而你不會在凌晨三點接到老闆的電話說「用戶在抱怨網站無法訪問」。管理證書是個重要的技能,在真實的工作中會用得上,特別是如果你計劃從事大型網頁應用部署或是 DevOps 工程相關的工作。
GO TO FULL VERSION