簡介
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