Certbot 是 Let’s Encrypt 的官方客户端,用于免费获取和自动更新 SSL/TLS 证书。以下是详细的命令使用指南。
📋 快速安装 Certbot
Ubuntu/Debian 系统
# 使用 apt 安装
sudo apt update
sudo apt install certbot python3-certbot-nginx # 对于 Nginx
sudo apt install certbot python3-certbot-apache # 对于 Apache
CentOS/RHEL/Fedora 系统
# CentOS/RHEL 8+
sudo dnf install certbot python3-certbot-nginx
# CentOS/RHEL 7
sudo yum install certbot python3-certbot-nginx
# Fedora
sudo dnf install certbot python3-certbot-nginx
通过 Snap 安装(推荐,保持最新)
# 安装 Snap
sudo apt install snapd # Debian/Ubuntu
sudo dnf install snapd # Fedora
sudo yum install snapd # CentOS
# 确保 Snap 核心已安装
sudo snap install core
sudo snap refresh core
# 安装 Certbot
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
🚀 基础证书获取命令
1. 自动配置模式(最简单)
# Nginx 自动配置
sudo certbot --nginx
# Apache 自动配置
sudo certbot --apache
执行后会:
- 检测你的虚拟主机配置
- 让你选择要为哪个域名申请证书
- 自动修改配置文件并重载服务
2. 独立验证模式(无 Web 服务器时)
# 获取证书(验证期间会启动临时 Web 服务器)
sudo certbot certonly --standalone \
-d example.com \
-d www.example.com \
--preferred-challenges http
# 指定端口(如果 80/443 端口被占用)
sudo certbot certonly --standalone \
-d example.com \
--http-01-port 8080 \
--preferred-challenges http
3. Webroot 验证模式(不中断服务)
# 基础命令
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com \
-d www.example.com
# 多个网站目录
sudo certbot certonly --webroot \
-w /var/www/site1 -d site1.com \
-w /var/www/site2 -d site2.com \
-w /var/www/site3 -d site3.com
4. DNS 验证模式(适合无80/443端口)
# 基础命令
sudo certbot certonly --manual \
--preferred-challenges dns \
-d example.com \
-d *.example.com
# 自动 DNS 插件(需要特定服务商)
sudo certbot certonly --dns-cloudflare \
-d example.com \
-d *.example.com
🔧 常用参数详解
域名相关
# 单域名
-d example.com
# 多域名(SAN 证书)
-d example.com -d www.example.com -d api.example.com
# 通配符证书(需要 DNS 验证)
-d *.example.com
# 混合域名
-d example.com -d *.example.com
证书存储位置
# 查看默认存储位置
certbot certificates
# 指定证书保存路径(不推荐,除非你知道自己在做什么)
--config-dir /etc/letsencrypt
--work-dir /var/lib/letsencrypt
--logs-dir /var/log/letsencrypt
# 自定义证书路径
--cert-path /path/to/cert.pem
--key-path /path/to/privkey.pem
--fullchain-path /path/to/fullchain.pem
--chain-path /path/to/chain.pem
账户和注册
# 注册新账户
certbot register --email admin@example.com
# 使用现有账户
--account account_id
# 查看账户信息
certbot show_account
🔄 证书管理命令
1. 查看已安装的证书
# 列出所有证书
sudo certbot certificates
# 详细查看特定证书
sudo certbot certificates --cert-name example.com
2. 手动续期证书
# 续期所有证书
sudo certbot renew
# 续期特定证书
sudo certbot renew --cert-name example.com
# 测试续期(不实际保存)
sudo certbot renew --dry-run
# 强制续期(即使未到期)
sudo certbot renew --force-renewal
3. 撤销/删除证书
# 撤销证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
# 删除证书(本地删除)
sudo certbot delete --cert-name example.com
# 删除并撤销
sudo certbot revoke --cert-name example.com --delete-after-revoke
4. 更新证书
# 添加域名到现有证书
sudo certbot certonly --cert-name example.com \
-d example.com -d www.example.com -d new.example.com
# 扩大证书范围
sudo certbot certonly --expand --cert-name example.com \
-d example.com -d www.example.com -d blog.example.com
⚙️ 高级配置选项
1. 指定 RSA 密钥长度
# 使用 RSA 2048(默认)
--key-type rsa --rsa-key-size 2048
# 使用 RSA 4096(更安全)
--key-type rsa --rsa-key-size 4096
# 使用 ECDSA 密钥(更小更快)
--key-type ecdsa --elliptic-curve secp384r1
2. 配置文件和自动化
# 生成配置文件
sudo certbot --nginx --redirect --hsts \
-d example.com \
--email admin@example.com \
--agree-tos \
--no-eff-email \
--keep-until-expiring
3. 修改现有配置
# 为已有证书添加重定向
sudo certbot --nginx --redirect
# 启用 HSTS
sudo certbot --nginx --hsts
# 启用 OCSP Stapling
sudo certbot --nginx --staple-ocsp
⏰ 自动化续期
1. 测试自动续期
# 测试续期脚本
sudo certbot renew --dry-run
2. 配置定时任务(Cron)
# 编辑 crontab
sudo crontab -e
# 添加以下行(每天凌晨2点检查续期,每周一执行)
0 2 * * 1 /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
3. 续期前后的钩子脚本
# 使用 hook 脚本
sudo certbot renew \
--pre-hook "systemctl stop nginx" \
--post-hook "systemctl start nginx" \
--renew-hook "/path/to/your/script.sh"
🐳 Docker 中使用 Certbot
# 获取证书
docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
-p 80:80 \
certbot/certbot certonly --standalone \
-d example.com
# 续期证书
docker run -it --rm --name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
certbot/certbot renew
🚨 故障排除命令
1. 调试模式
# 开启详细日志
sudo certbot --verbose
# 调试特定命令
sudo certbot --debug
# 查看日志文件
tail -f /var/log/letsencrypt/letsencrypt.log
2. 常见问题解决
# 重置 Certbot 配置(谨慎使用)
sudo rm -rf /etc/letsencrypt/{accounts,archive,csr,live,renewal}
# 检查证书是否即将过期
sudo certbot certificates | grep -A2 "VALID"
3. 检查服务状态
# 检查 Nginx 配置
sudo nginx -t
# 检查 Certbot 插件
certbot plugins
# 查看系统服务状态
sudo systemctl status certbot.timer
📝 配置文件示例
/etc/letsencrypt/cli.ini(全局配置)
# 使用 RSA 4096 位密钥
rsa-key-size = 4096
# 默认邮箱
email = admin@example.com
# 同意服务条款
agree-tos = true
# 不订阅 EFF 邮件
eff-email = false
# 开启 HTTPS 重定向
redirect = true
# 启用 HSTS
hsts = true
# 启用 OCSP Stapling
staple-ocsp = true
# 必须使用 HTTPS
uir = true
证书续期配置文件
# /etc/letsencrypt/renewal/example.com.conf
[renewalparams]
account = account_id
authenticator = webroot
webroot_path = /var/www/html,
server = https://acme-v02.api.letsencrypt.org/directory
🎯 最佳实践命令
1. 一站式获取和配置
sudo certbot --nginx \
-d example.com \
-d www.example.com \
--redirect \
--hsts \
--staple-ocsp \
--must-staple \
--uir \
--email admin@example.com \
--agree-tos \
--keep-until-expiring
2. 为多个子域名批量获取
# 创建域名列表文件 domains.txt
example.com
www.example.com
api.example.com
blog.example.com
# 批量处理
while read domain; do
sudo certbot --nginx -d $domain
done < domains.txt
3. 设置安全强化配置
# 获取 ECDSA 证书(性能更好)
sudo certbot certonly --nginx \
--key-type ecdsa \
--elliptic-curve secp384r1 \
-d example.com
🆘 获取帮助
# 查看所有命令
certbot --help
# 查看子命令帮助
certbot certonly --help
certbot renew --help
# 查看官方文档
# https://certbot.eff.org/docs/
这个指南涵盖了 Certbot 的大部分常用命令。根据你的具体需求(Nginx/Apache、单域名/通配符、自动/手动验证),选择相应的命令组合即可。