CodeGym /Adesua ahorow /Docker SELF /證書管理與自動更新設置

證書管理與自動更新設置

Docker SELF
等級 7 , 課堂 4
開放

證書管理與自動更新設置

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設置更新:

  1. 打開當前用戶的Cron編輯器:

    sudo crontab -e
    
  2. 在文件末尾添加以下行:

    0 0 * * * certbot renew --quiet
    

    該命令會在每天午夜時運行certbot renew--quiet標誌會抑制不必要的輸出,因此更新會默默地進行,不會打擾到任何人。

  3. 保存更改並退出編輯器。

現在你的伺服器會自動更新證書,再也不用擔心它們會過期了(或幾乎不用)。


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 工程相關的工作。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION