Certbot 完全使用指南
Certbot 是 Let’s Encrypt 官方提供的免费、自动化 SSL/TLS 证书管理工具。# 创建服务文件 sudo nano /etc/systemd/system/certbot-renew.service[Unit][Service]# 创建定时器文件 sudo nano /etc/systemd/system/certbot-renew.timer[Unit][Timer][I
·
Certbot 完全使用指南
目录
1. 简介
1.1 什么是 Certbot
Certbot 是 Let’s Encrypt 官方提供的免费、自动化 SSL/TLS 证书管理工具。
1.2 主要特点
- ✅ 完全免费:Let’s Encrypt 证书永久免费
- ✅ 自动化:自动申请、安装、续期
- ✅ 安全性:支持现代加密算法
- ✅ 简单易用:一条命令完成申请
- ✅ 广泛支持:Apache、Nginx、Web服务器等
1.3 证书有效期
- 默认有效期:90天
- 建议续期时间:到期前30天
- 自动续期:可设置定时任务自动续期
2. 安装
2.1 Ubuntu/Debian
# 更新软件包
sudo apt update
# 安装 Certbot
sudo apt install certbot
# 安装 Certbot 插件(可选)
sudo apt install python3-certbot-nginx # Nginx插件
sudo apt install python3-certbot-apache # Apache插件
2.2 CentOS 7
# 安装 EPEL 源
sudo yum install epel-release
# 安装 Certbot
sudo yum install certbot
# 安装 Nginx 插件
sudo yum install python2-certbot-nginx
2.3 CentOS 8 / Rocky Linux / AlmaLinux
# 安装 EPEL 源
sudo dnf install epel-release
# 安装 Certbot
sudo dnf install certbot
# 安装 Nginx 插件
sudo dnf install python3-certbot-nginx
2.4 Fedora
sudo dnf install certbot python3-certbot-nginx
2.5 从 Snap 安装(通用)
# 安装 Snap(如果没有)
sudo snap install core; sudo snap refresh core
# 安装 Certbot
sudo snap install --classic certbot
# 创建符号链接
sudo ln -s /snap/bin/certbot /usr/bin/certbot
2.6 验证安装
# 查看 Certbot 版本
certbot --version
# 查看 Certbot 帮助
certbot --help
# 列出已安装的插件
certbot plugins
3. 申请证书
3.1 验证方式对比
| 验证方式 | 端口 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| standalone | 80 | 无需Web服务器 | 需要临时占用80端口 | 新服务器、测试环境 |
| webroot | 80/8080 | 不停止服务 | 需要网站根目录 | 生产环境 |
| nginx | 80 | 自动配置 | 需要Nginx运行 | Nginx服务器 |
| apache | 80 | 自动配置 | 需要Apache运行 | Apache服务器 |
| dns | 无 | 支持泛域名 | 需要DNS管理权限 | 泛域名证书 |
3.2 Standalone 模式(推荐新手)
特点:Certbot 自建临时服务器验证域名
# 步骤1:停止占用80端口的程序
sudo systemctl stop nginx
# 步骤2:申请单个域名证书
sudo certbot certonly --standalone -d example.com
# 步骤3:申请多个域名证书
sudo certbot certonly --standalone -d example.com -d www.example.com -d api.example.com
# 步骤4:指定邮箱(用于证书到期提醒)
sudo certbot certonly --standalone -d example.com --email admin@example.com --agree-tos --no-eff-email
# 步骤5:申请后启动服务
sudo systemctl start nginx
参数说明:
certonly: 只申请证书,不自动配置--standalone: 使用独立模式-d: 指定域名(可多次使用)--email: 指定邮箱--agree-tos: 同意服务条款--no-eff-email: 不加入EFF邮箱列表
3.3 Webroot 模式(推荐生产环境)
特点:在网站根目录创建验证文件
# 步骤1:申请证书(网站根目录)
sudo certbot certonly --webroot -w /var/www/html -d example.com
# 步骤2:多个域名,不同网站根目录
sudo certbot certonly --webroot \
-w /var/www/html -d example.com \
-w /var/www/blog -d blog.example.com
# 步骤3:自定义webroot路径(非标准目录)
sudo certbot certonly --webroot \
--webroot-path=/var/www/website \
-d example.com
# 步骤4:指定验证URL前缀
sudo certbot certonly --webroot \
-w /var/www/html \
-d example.com \
--webroot-path=/var/www/html/.well-known/acme-challenge
3.4 Nginx 插件(自动配置)
特点:自动配置 Nginx 并申请证书
# 步骤1:自动申请并配置Nginx
sudo certbot --nginx -d example.com -d www.example.com
# 步骤2:只申请证书,不修改Nginx配置
sudo certbot certonly --nginx -d example.com
# 步骤3:强制更新证书(即使未到期)
sudo certbot --nginx -d example.com --force-renewal
# 步骤4:跳过交互式提问(自动化脚本)
sudo certbot --nginx -d example.com --non-interactive --agree-tos --email admin@example.com
3.5 Apache 插件
# 自动申请并配置Apache
sudo certbot --apache -d example.com
# 只申请证书
sudo certbot certonly --apache -d example.com
3.6 DNS 验证(泛域名证书)
特点:通过DNS TXT记录验证,支持泛域名
# 步骤1:手动DNS验证(会提示添加TXT记录)
sudo certbot certonly --manual --preferred-challenges dns -d example.com
# 步骤2:申请泛域名证书
sudo certbot certonly --manual --preferred-challenges dns -d "*.example.com" -d example.com
# 步骤3:指定邮箱
sudo certbot certonly --manual --preferred-challenges dns \
-d "*.example.com" \
-d example.com \
--email admin@example.com \
--agree-tos
申请流程:
- 执行命令后会提示添加DNS TXT记录
- 登录域名DNS管理后台
- 添加指定的TXT记录
- 等待生效(通常1-5分钟)
- 按回车继续验证
- 验证成功后证书申请完成
3.7 DNS API 自动化(云服务商)
阿里云
# 安装DNS插件
sudo pip install certbot-dns-aliyun
# 创建配置文件
sudo mkdir -p /etc/letsencrypt
sudo nano /etc/letsencrypt/aliyun.ini
dns_aliyun_access_key_id = your-access-key-id
dns_aliyun_access_key_secret = your-access-key-secret
# 设置权限
sudo chmod 600 /etc/letsencrypt/aliyun.ini
# 申请证书
sudo certbot certonly \
--dns-aliyun \
--dns-aliyun-credentials /etc/letsencrypt/aliyun.ini \
--dns-aliyun-propagation-seconds 30 \
-d "*.example.com" -d example.com
腾讯云
# 安装DNS插件
sudo pip install certbot-dns-dnspod
# 创建配置文件
sudo nano /etc/letsencrypt/dnspod.ini
dns_dnspod_api_token = your-api-token
sudo chmod 600 /etc/letsencrypt/dnspod.ini
sudo certbot certonly \
--dns-dnspod \
--dns-dnspod-credentials /etc/letsencrypt/dnspod.ini \
--dns-dnspod-propagation-seconds 30 \
-d "*.example.com" -d example.com
Cloudflare
# 安装DNS插件
sudo pip install certbot-dns-cloudflare
# 创建配置文件
sudo nano /etc/letsencrypt/cloudflare.ini
dns_cloudflare_api_token = your-api-token
sudo chmod 600 /etc/letsencrypt/cloudflare.ini
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini \
--dns-cloudflare-propagation-seconds 30 \
-d "*.example.com" -d example.com
3.8 批量申请证书
# 创建域名列表文件
cat > domains.txt << EOF
example.com,www.example.com
api.example.com
blog.example.com
*.app.example.com,app.example.com
EOF
# 循环申请
while IFS=',' read -r domains; do
sudo certbot certonly --webroot -w /var/www/html -d $domains --email admin@example.com --agree-tos --non-interactive
done < domains.txt
4. 配置Web服务器
4.1 证书文件位置
申请成功后,证书文件位于:
/etc/letsencrypt/live/example.com/
├── fullchain.pem # 完整证书链(服务器证书+中间证书)
├── privkey.pem # 私钥
├── cert.pem # 单个服务器证书
└── chain.pem # 中间证书链
重要:始终使用 /etc/letsencrypt/live/example.com/ 下的符号链接,不要直接使用 /etc/letsencrypt/archive/ 下的文件。
4.2 Nginx 配置
基础HTTPS配置
server {
listen 443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
root /var/www/html;
index index.html;
}
}
完整HTTPS配置
server {
listen 443 ssl http2;
server_name example.com www.example.com;
# SSL证书配置
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# SSL协议
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers off;
# 加密套件(推荐)
ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
# SSL会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# 安全头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
# 网站配置
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
# HTTP自动跳转HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
多域名配置
# example.com
server {
listen 443 ssl http2;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他SSL配置...
}
# api.example.com
server {
listen 443 ssl http2;
server_name api.example.com;
ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;
# 其他SSL配置...
}
# 泛域名 *.app.example.com
server {
listen 443 ssl http2;
server_name .app.example.com;
ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
# 其他SSL配置...
}
4.3 Apache 配置
启用SSL模块
# Ubuntu/Debian
sudo a2enmod ssl
sudo a2enmod headers
# CentOS/RHEL
sudo yum install mod_ssl
配置HTTPS站点
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/example.com/chain.pem
# SSL配置
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
# 安全头
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
# HTTP跳转HTTPS
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
Redirect permanent / https://example.com/
</VirtualHost>
4.4 测试SSL配置
# 测试Nginx配置
sudo nginx -t
# 重新加载Nginx
sudo systemctl reload nginx
# 测试Apache配置
sudo apachectl configtest
# 重新加载Apache
sudo systemctl reload httpd
在线测试工具:
- https://www.ssllabs.com/ssltest/
- https://https://www.cdn77.com/http-security-test
5. 证书续期
5.1 手动续期
# 测试续期(不实际续期)
sudo certbot renew --dry-run
# 手动续期(所有证书)
sudo certbot renew
# 续期指定证书
sudo certbot renew --cert-name example.com
# 强制续期(即使未到期)
sudo certbot renew --force-renewal
# 续期后执行命令
sudo certbot renew --post-hook "systemctl reload nginx"
5.2 自动续期配置
方法一:Cron 定时任务
# 编辑定时任务
sudo crontab -e
添加以下内容:
# 每天凌晨2点检查续期
0 2 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
# 或每周检查一次
0 2 * * 0 certbot renew --quiet --post-hook "systemctl reload nginx"
# 或每天多次检查
0 0,12 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
方法二:Systemd Timer(CentOS 8+/Ubuntu 20.04+)
# 启用certbot.timer(已自动安装)
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
# 查看定时器状态
sudo systemctl list-timers | grep certbot
# 手动触发
sudo systemctl start certbot.service
方法三:创建自定义定时器
# 创建服务文件
sudo nano /etc/systemd/system/certbot-renew.service
[Unit]
Description=Certbot Renewal
[Service]
Type=oneshot
ExecStart=/usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"
# 创建定时器文件
sudo nano /etc/systemd/system/certbot-renew.timer
[Unit]
Description=Certbot Renewal Timer
[Timer]
OnCalendar=daily
RandomizedDelaySec=1h
Persistent=true
[Install]
WantedBy=timers.target
# 启用并启动定时器
sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timer
5.3 续期钩子
# 续期前执行命令
sudo certbot renew --pre-hook "systemctl stop nginx"
# 续期后执行命令
sudo certbot renew --post-hook "systemctl start nginx"
# 续期成功后执行
sudo certbot renew --renew-hook "/path/to/script.sh"
# 组合使用
sudo certbot renew \
--pre-hook "systemctl stop nginx" \
--post-hook "systemctl start nginx" \
--renew-hook "echo 'Certificate renewed' | mail -s 'SSL Certificate' admin@example.com"
5.4 配置续期参数
# 查看续期配置
sudo certbot certificates
# 编辑续期配置
sudo nano /etc/letsencrypt/renewal/example.com.conf
配置文件示例:
# renew_before_expiry = 30 days
version = 2.9.0
archive_dir = /etc/letsencrypt/archive/example.com
cert = /etc/letsencrypt/live/example.com/cert.pem
privkey = /etc/letsencrypt/live/example.com/privkey.pem
chain = /etc/letsencrypt/live/example.com/chain.pem
fullchain = /etc/letsencrypt/live/example.com/fullchain.pem
# Options used in the renewal process
[renewalparams]
account = abc123
authenticator = webroot
webroot_path = /var/www/html,
post_hook = systemctl reload nginx
6. 证书管理
6.1 查看证书
# 列出所有证书
sudo certbot certificates
# 查看证书详情
sudo certbot certificates --cert-name example.com
# 查看证书到期时间
sudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -dates
# 查看证书信息
sudo openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -noout -text
输出示例:
Certificate Name: example.com
Domains: example.com www.example.com
Expiry Date: 2026-06-25 08:30: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
6.2 撤销证书
# 撤销指定证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
# 撤销并删除证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem --delete-after-revoke
# 撤销所有证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem \
--cert-path /etc/letsencrypt/live/api.example.com/cert.pem
6.3 删除证书
# 删除指定证书
sudo certbot delete --cert-name example.com
# 交互式删除
sudo certbot delete
# 删除后清理配置
sudo certbot delete --cert-name example.com --keep-until-expiring
6.4 导出证书
# 导出证书到指定目录
sudo certbot certificates --cert-name example.com
# 复制证书文件
sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /path/to/backup/
sudo cp /etc/letsencrypt/live/example.com/privkey.pem /path/to/backup/
6.5 备份证书
# 创建备份目录
sudo mkdir -p /backup/letsencrypt
# 备份所有证书
sudo tar -czf /backup/letsencrypt/certificates-$(date +%Y%m%d).tar.gz /etc/letsencrypt/
# 或使用rsync同步
sudo rsync -avz /etc/letsencrypt/ /backup/letsencrypt/
7. 高级配置
7.1 配置文件位置
/etc/letsencrypt/
├── accounts/ # 账户信息
├── archive/ # 证书历史版本
├── live/ # 当前证书(符号链接)
├── renewal/ # 续期配置
├── cli.ini # 全局配置文件
└── options-ssl-nginx.conf # Nginx SSL配置模板
7.2 全局配置
# 编辑全局配置
sudo nano /etc/letsencrypt/cli.ini
配置示例:
# 配置邮箱
email = admin@example.com
# 同意服务条款
agree-tos = True
# 自动续期
no-eff-email = True
# 默认验证方式
authenticator = webroot
webroot-path = /var/www/html
# 续期钩子
post-hook = systemctl reload nginx
# 密钥强度
rsa-key-size = 4096
7.3 更改密钥大小
# 申请时指定密钥大小(默认2048)
sudo certbot certonly --webroot -d example.com --rsa-key-size 4096
# 使用ECDSA密钥
sudo certbot certonly --webroot -d example.com --key-type ecdsa
# 指定ECC曲线
sudo certbot certonly --webroot -d example.com --key-type ecdsa --elliptic-curve secp256r1
7.4 限制重试次数
# 编辑续期配置
sudo nano /etc/letsencrypt/renewal/example.com.conf
添加:
[renewalparams]
max_log_backups = 5
authenticator = webroot
7.5 使用Staging测试环境
# 测试环境不会限制申请次数
sudo certbot certonly --webroot -d example.com --staging
# 生产环境
sudo certbot certonly --webroot -d example.com
7.6 日志管理
# 查看日志
sudo cat /var/log/letsencrypt/letsencrypt.log
# 清理旧日志
sudo find /var/log/letsencrypt -name "*.log" -mtime +30 -delete
# 限制日志大小
sudo nano /etc/logrotate.d/letsencrypt
/var/log/letsencrypt/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root root
}
8. 常见问题
8.1 80端口被占用
# 查看占用80端口的进程
sudo netstat -tlnp | grep :80
sudo lsof -i :80
# 停止占用进程后重新申请
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com
sudo systemctl start nginx
8.2 域名未解析到服务器
# 检查DNS解析
nslookup example.com
dig example.com
host example.com
# 确保A记录指向服务器IP
# 等待DNS生效(通常1-24小时,最快5分钟)
8.3 续期失败
# 查看续期日志
sudo cat /var/log/letsencrypt/letsencrypt.log | tail -100
# 手动测试续期
sudo certbot renew --dry-run --force-renewal
# 检查续期配置
sudo certbot certificates
# 强制续期
sudo certbot renew --force-renewal
常见失败原因:
- 80端口被占用
- 域名未解析
- 防火墙阻止80端口
- Webroot路径错误
- DNS TXT记录未生效
8.4 证书到期未续期
# 手动续期
sudo certbot renew
# 强制续期
sudo certbot renew --force-renewal
# 重新申请
sudo certbot certonly --webroot -d example.com --force-renewal
8.5 权限问题
# 修改证书目录权限
sudo chmod 755 /etc/letsencrypt/live
sudo chmod 755 /etc/letsencrypt/live/example.com
# 修改证书文件权限
sudo chmod 644 /etc/letsencrypt/live/example.com/fullchain.pem
sudo chmod 600 /etc/letsencrypt/live/example.com/privkey.pem
# Nginx用户读取权限
sudo chown -R nginx:nginx /etc/letsencrypt/live/
8.6 速率限制
Let’s Encrypt 限制:
- 5次/小时:每个域名
- 50次/天:每个注册账户
- 300次/周:每个注册账户
# 遇到限制时使用测试环境
sudo certbot certonly --webroot -d example.com --staging
# 或等待限制重置(通常是1小时)
8.7 证书不信任
# 检查证书链
openssl s_client -connect example.com:443 -servername example.com
# 确保使用fullchain.pem而非cert.pem
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
# 重新加载配置
sudo systemctl reload nginx
9. 最佳实践
9.1 安全建议
✅ 必须做:
- 使用最新版本 Certbot
- 启用自动续期
- 配置 HSTS 头
- 禁用不安全的协议(SSLv2/SSLv3/TLSv1.0/TLSv1.1)
- 定期检查证书有效期
- 备份证书和配置
❌ 避免:
- 手动管理续期
- 使用弱加密套件
- 忽略续期失败
- 泄露私钥文件
9.2 性能优化
# 启用HTTP/2
listen 443 ssl http2;
# SSL会话缓存
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
# 启用OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
# 调整缓冲区
ssl_buffer_size 4k;
9.3 监控告警
# 创建监控脚本
cat > /usr/local/bin/check-ssl.sh << 'EOF'
#!/bin/bash
DOMAINS=("example.com" "api.example.com")
ALERT_DAYS=30
ALERT_EMAIL="admin@example.com"
for domain in "${DOMAINS[@]}"; do
expiry=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
expiry_date=$(date -d "$expiry" +%s)
current_date=$(date +%s)
days_left=$(( (expiry_date - current_date) / 86400 ))
if [ $days_left -lt $ALERT_DAYS ]; then
echo "Certificate for $domain expires in $days_left days" | mail -s "SSL Certificate Alert" $ALERT_EMAIL
fi
done
EOF
chmod +x /usr/local/bin/check-ssl.sh
# 添加到定时任务
crontab -e
# 添加:0 9 * * * /usr/local/bin/check-ssl.sh
9.4 自动化部署脚本
#!/bin/bash
# ssl-automate.sh
DOMAIN="example.com"
EMAIL="admin@example.com"
WEBROOT="/var/www/html"
# 申请证书
sudo certbot certonly --webroot \
-w $WEBROOT \
-d $DOMAIN \
-d www.$DOMAIN \
--email $EMAIL \
--agree-tos \
--non-interactive
# 配置Nginx
cat > /etc/nginx/sites-available/$DOMAIN << 'EOF'
server {
listen 443 ssl http2;
server_name DOMAIN;
ssl_certificate /etc/letsencrypt/live/DOMAIN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/DOMAIN/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
root /var/www/html;
index index.html;
}
server {
listen 80;
server_name DOMAIN;
return 301 https://DOMAIN$request_uri;
}
EOF
# 替换域名
sed -i "s/DOMAIN/$DOMAIN/g" /etc/nginx/sites-available/$DOMAIN
# 启用配置
sudo ln -s /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
# 测试并重载
sudo nginx -t && sudo systemctl reload nginx
# 设置自动续期
echo "0 2 * * * certbot renew --quiet --post-hook 'systemctl reload nginx'" | sudo crontab -
echo "SSL配置完成!"
9.5 检查清单
部署SSL证书后检查:
- 证书成功申请
- Nginx/Apache配置正确
- HTTPS可访问
- HTTP自动跳转HTTPS
- SSL测试评分A+(https://www.ssllabs.com/ssltest/)
- 自动续期配置成功
- 续期测试通过(
certbot renew --dry-run) - 安全头配置正确
- 监控告警配置完成
- 证书备份完成
附录
A. 速查命令
# 安装
sudo apt install certbot
# 申请(standalone)
sudo certbot certonly --standalone -d example.com
# 申请(webroot)
sudo certbot certonly --webroot -w /var/www/html -d example.com
# 申请(nginx自动配置)
sudo certbot --nginx -d example.com
# 查看证书
sudo certbot certificates
# 测试续期
sudo certbot renew --dry-run
# 设置自动续期
crontab -e
# 0 2 * * * certbot renew --quiet --post-hook "systemctl reload nginx"
# 撤销证书
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
# 删除证书
sudo certbot delete --cert-name example.com
B. 常用端口
| 协议 | 端口 | 用途 |
|---|---|---|
| HTTP | 80 | Web访问 |
| HTTPS | 443 | SSL加密访问 |
| DNS | 53 | DNS解析 |
C. 有用链接
版本:1.0
更新日期:2026-03-25
更多推荐
所有评论(0)