四、Nginx SSL 安全配置
获取证书后,需要优化Nginx配置以提升安全性:
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;
# 安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# HSTS(强制HTTPS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
# 其他安全头
add_header X-Frame-Options DENY always;
add_header X-Content-Type-Options nosniff always;
add_header X-XSS-Protection "1; mode=block" always;
# OCSP Stapling
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;
# 网站根目录
root /var/www/html;
index index.html;
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name example.com www.example.com;
return 301 https://;
}配置后验证并重启Nginx:
sudo nginx -t
sudo systemctl reload nginx五、证书监控与告警
为了避免证书过期导致网站故障,需要建立监控机制。
5.1 本地监控脚本
#!/bin/bash
# check_ssl_expiry.sh
DOMAIN="example.com"
PORT=443
WARN_DAYS=30
expiry_date=
expiry_epoch=
current_epoch=1785546596
days_left=0
if [ -lt ]; then
echo "警告: SSL证书将在 天后过期!"
# 这里可以添加邮件/短信告警逻辑
fi5.2 使用在线监控工具
- SSL Labs Server Test:免费的SSL配置检测工具,同时会显示证书过期时间。
- UptimeRobot:可以监控证书过期,支持邮件、短信告警。
- Prometheus + blackbox_exporter:适合企业级监控,自定义告警规则。
六、常见问题与解决方案
6.1 证书续期失败
常见原因:
- 80/443端口被防火墙阻挡
- 域名DNS解析变更
- Certbot版本过旧
解决方案:
# 升级Certbot
sudo apt update && sudo apt upgrade certbot
# 手动续期并查看详细日志
sudo certbot renew --verbose6.2 证书路径变更
如果移动了证书文件,需要更新Nginx配置并重新加载:
# 查看证书实际路径
sudo certbot certificates
# 更新Nginx配置中的ssl_certificate和ssl_certificate_key路径
# 然后重启Nginx
sudo systemctl reload nginx6.3 泛域名证书续期
泛域名证书必须使用DNS验证方式,确保DNS插件正确配置:
# 查看已安装的DNS插件
sudo find /usr/lib/python3/dist-packages/certbot_dns* -name "*.py" | head -5七、总结
SSL证书管理是网站运维的基础工作,通过Certbot工具可以实现证书的自动获取和续期,配合完善的监控告警机制,可以完全避免证书过期导致的网站故障。建议运维人员:
- 优先选择Let's Encrypt免费证书,降低成本
- 配置自动续期任务,确保证书永不间断
- 定期检查SSL配置,使用最新的安全标准
- 建立证书监控告警,提前发现潜在问题
通过本文介绍的方法,你可以建立一套完善的SSL证书管理体系,让网站始终处于安全的HTTPS保护之下。
评论