Linux下Certbot使用教程

唐青枫發表於2024-12-03

簡介

Certbot 是一個命令列工具,用於自動執行從 Let’s Encrypt 獲取和更新SSL/TLS 證書的過程。它透過管理證書、配置 Web 伺服器並自動更新證書來簡化網站安全保護。

安裝

  • Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx  # For Nginx
sudo apt install certbot python3-certbot-apache  # For Apache
  • CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx  # For Nginx
sudo yum install certbot python3-certbot-apache  # For Apache

常用選項

  • --nginx:獲取並配置 Nginx 的證書。
  • --apache:獲取並配置 Apache 的證書
  • certonly:僅獲取證書,不執行安裝
  • renew:更新所有已安裝的證書
  • delete:刪除證書
  • revoke --cert-path <path>:吊銷證書

證書檔案說明

證書檔案位置在:/etc/letsencrypt/live/<domain>/

  • fullchain.pem:完整的證書鏈
  • privkey.pem:私鑰檔案
  • cert.pem:域名證書
  • chain.pem:證書頒發機構鏈

示例用法

使用 Nginx 自動獲取並安裝證書

sudo certbot --nginx

# 根據提示輸入以下資訊
# 輸入郵箱用於過期提醒
# 同意服務條款
# 選擇nginx配置的域名

使用 Apache 自動獲取並安裝證書

sudo certbot --apache

# 與nginx類似

使用獨立模式生成證書

一般用於沒有 Web 服務在執行

# 先停止 `nginx`
sudo systemctl stop nginx

# 執行certbot
sudo certbot certonly --standalone -d example.com -d www.example.com

# 啟動nginx
sudo systemctl start nginx

透過寫入已執行的 Web 伺服器的 Webroot 目錄來獲取證書。

certbot certonly --webroot -w /var/www/example -d www.example.com

測試證書更新過程

sudo certbot renew --dry-run

手動更新證書

sudo certbot renew

使用萬用字元證書

sudo certbot certonly --manual --preferred-challenges=dns
-d "*.example.com" -d example.com

# Certbot 將提示需要新增 DNS TXT 記錄以進行域驗證

Nginx 配置 https 證書

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
}

Apache 配置 https 證書

<VirtualHost *:443>
    ServerName example.com

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
</VirtualHost>

強制更新證書

sudo certbot renew --force-renewal

重新頒發證書

sudo certbot certonly --nginx -d example.com -d www.example.com

刪除一個證書

sudo certbot delete

# 會提示選擇已配置證書的域名
Which certificate would you like to delete?
  1: example.com
  2: test.com

吊銷證書

sudo certbot revoke --cert-path
 /etc/letsencrypt/live/example.com/fullchain.pem

預設的證書更新指令碼

通常 Certbot 會設定 /etc/cron.d/certbot 計劃任務,預設是每天兩次自動續訂距離到期日期還有三十天的證書,並且 systemd 會配置一個 certbot.timer 的服務來執行。

● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset:>
     Active: active (waiting) since Mon 2022-04-11 20:52:46 UTC; 4min 3s ago
    Trigger: Tue 2022-04-12 00:56:55 UTC; 4h 0min left
   Triggers: ● certbot.service

Apr 11 20:52:46 jammy-encrypt systemd[1]: Started Run certbot twice daily.

手動新增計劃任務更新證書

0 3 * * * certbot renew --quiet --post-hook "systemctl reload nginx"

0 3 * * * certbot renew --quiet && systemctl reload nginx

相關文章