菜单

Loen
发布于 2025-12-15 / 2 阅读
0
0

Certbot 命令完整指南

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、单域名/通配符、自动/手动验证),选择相应的命令组合即可。


评论