一、环境准备与工具安装
1.1 操作系统兼容性说明
当前方案适用于基于RHEL/CentOS生态的Linux发行版(如Anolis OS、Fedora等),其他系统需根据包管理工具调整安装命令。建议使用较新版本(如CentOS 8+或Anolis OS 8.6+)以获得更好的软件包支持。
1.2 包管理工具配置
执行以下命令更新软件源索引:
sudo dnf clean all # 清除缓存sudo dnf makecache # 生成新缓存sudo dnf update -y # 升级系统包
对于使用yum的系统,可将上述命令中的dnf替换为yum。建议配置国内镜像源加速下载(如某镜像站点的CentOS源)。
1.3 核心组件安装
安装证书管理工具及其Web服务器插件:
sudo dnf install -y certbot python3-certbot-nginx
该组合包含:
- Certbot核心程序:负责证书申请、部署和续期
- Nginx插件:实现证书的自动化配置
- Python3依赖:提供运行时环境支持
二、服务端配置预处理
2.1 编码规范检查
使用file命令验证配置文件编码:
file /etc/nginx/nginx.conf
非UTF-8编码文件需转换(示例将GBK转为UTF-8):
iconv -f GBK -t UTF-8 /etc/nginx/nginx.conf -o /tmp/nginx.conf.utf8mv /tmp/nginx.conf.utf8 /etc/nginx/nginx.conf
2.2 虚拟主机配置
在Nginx配置中必须明确指定server_name,示例配置片段:
server {listen 80;listen [::]:80;server_name example.com www.example.com;root /var/www/html;index index.html;location / {try_files $uri $uri/ =404;}}
关键注意事项:
- 支持多域名配置(空格分隔)
- IPv6监听建议保留
- 避免使用通配符域名(如*.example.com)
2.3 账户注册准备
证书颁发机构(CA)要求提供有效邮箱用于:
- 证书过期提醒(提前30天/7天/1天)
- 安全事件通知
- 证书吊销信息
建议使用企业邮箱而非个人邮箱,可通过以下方式绕过邮箱验证(不推荐):
certbot --nginx -d example.com --register-unsafely-without-email
三、证书获取与部署
3.1 交互式申请流程
执行自动化申请命令:
certbot --nginx -d example.com -d www.example.com --no-eff-email
参数说明:
--nginx:自动修改Nginx配置-d:指定域名(可多次使用)--no-eff-email:不订阅EFF通讯
3.2 证书存储路径
成功申请后证书将存储在:
/etc/letsencrypt/live/example.com/├── cert.pem # 证书文件├── chain.pem # 中间证书链├── fullchain.pem # 完整证书链└── privkey.pem # 私钥文件
3.3 配置验证要点
检查Nginx配置是否包含:
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
使用以下命令测试配置语法:
nginx -t
四、自动化续期方案
4.1 续期机制说明
Let’s Encrypt证书有效期为90天,需建立自动续期机制。Certbot默认安装时已配置systemd定时任务:
systemctl status certbot.timer
4.2 手动测试续期
执行干运行模式验证续期流程:
certbot renew --dry-run
正式续期命令:
certbot renew --quiet --no-self-upgrade
4.3 续期失败处理
常见原因及解决方案:
| 错误类型 | 解决方案 |
|————-|—————|
| 域名解析失败 | 检查DNS记录配置 |
| 80端口占用 | 停止占用端口的进程 |
| Nginx配置错误 | 修复语法错误后重试 |
| 账户锁定 | 等待1小时后重试 |
五、高级配置选项
5.1 OCSP Stapling配置
在Nginx配置中启用OCSP装订提升TLS性能:
ssl_stapling on;ssl_stapling_verify on;ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;resolver 8.8.8.8 8.8.4.4 valid=300s;resolver_timeout 5s;
5.2 HSTS头设置
强制HTTPS访问的安全策略:
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
5.3 多服务器证书同步
对于集群环境,建议:
- 使用rsync同步证书目录
- 通过配置管理工具(如Ansible)分发证书
- 考虑使用对象存储作为中央证书仓库
六、监控与告警配置
6.1 证书过期监控
建议配置监控系统检查证书有效期:
openssl x509 -enddate -noout -in /etc/letsencrypt/live/example.com/cert.pem | cut -d= -f2
6.2 续期失败告警
通过日志分析工具监控/var/log/letsencrypt/目录,设置当出现Failed for domain关键词时触发告警。
七、常见问题处理
7.1 证书申请频率限制
Let’s Encrypt对同一域名每周最多申请50次证书,超额将被限制7天。建议:
- 测试环境使用staging环境
- 生产环境避免频繁重申请
7.2 IPv6证书申请
确保服务器已正确配置AAAA记录,Certbot会自动检测IPv6可达性。
7.3 泛域名证书限制
当前免费证书不支持通配符域名(如*.example.com),需通过DNS验证方式申请(需使用DNS插件如certbot-dns-cloudflare)。
通过以上标准化流程,运维人员可实现从证书申请到续期的全自动化管理。建议每季度审查证书配置,确保符合最新安全标准(如TLS 1.3支持、弱密码套件禁用等)。对于大型部署场景,可考虑集成到CI/CD流水线实现证书的自动化轮换。