>Ubuntu Nginx配置SSL证书自动续期完整指南 (2026)
>引言
在Ubuntu服务器上为Nginx配置SSL证书并实现自动续期,是保障网站HTTPS安全的重要环节。本文将详细介绍如何使用Let’s Encrypt的Certbot工具,在Ubuntu系统上为Nginx配置免费SSL证书,并设置自动续期任务,确保证书永远不会过期。
>为什么需要自动续期SSL证书?
SSL证书通常有有效期限制(Let’s Encrypt证书有效期为90天)。如果证书过期,网站将显示安全警告,影响用户信任和SEO排名。手动续期不仅繁琐,还容易遗忘。配置自动续期后,系统会在证书到期前自动更新,无需人工干预。
>环境准备
在开始配置之前,请确保:
1. Ubuntu系统:本文适用于Ubuntu 20.04/22.04/24.04版本
2. Nginx已安装:确保Nginx Web服务器正常运行
3. 域名解析:域名已正确解析到服务器IP地址
4. root权限:需要sudo或root用户执行命令
>第一步:安装Certbot工具
Certbot是Let’s Encrypt官方推荐的证书管理工具,可以自动完成证书申请、配置和续期。
>更新系统软件包
>sudo apt update
sudo apt upgrade -y
安装Certbot和Nginx插件
>sudo apt install certbot python3-certbot-nginx -y
安装完成后,可以验证Certbot版本:
>certbot --version
第二步:申请SSL证书
Certbot可以自动修改Nginx配置文件,无需手动编辑。
>运行Certbot获取证书
>sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
将yourdomain.com替换为你的实际域名。可以添加多个-d参数来支持多个子域名。
>交互式配置过程
运行命令后,Certbot会提示:
1. 输入邮箱地址:用于证书到期提醒
2. 同意服务条款:输入Y确认
3. 选择是否重定向HTTP到HTTPS:建议选择2(重定向),强制使用HTTPS
配置完成后,Certbot会自动修改Nginx配置文件并重新加载Nginx服务。
>第三步:验证SSL证书配置
>检查Nginx配置文件
Certbot会在Nginx配置文件中添加SSL相关配置。检查配置文件:
>sudo nginx -t
如果没有语法错误,重新加载Nginx:
>sudo systemctl reload nginx
测试HTTPS访问
在浏览器中访问 https://yourdomain.com,确认:
>
- 浏览器地址栏显示锁形图标
- 证书信息显示由Let's Encrypt颁发
- 页面正常加载,无混合内容警告
也可以使用在线SSL检测工具(如SSL Labs)进行测试。
>第四步:配置自动续期
Let's Encrypt证书有效期为90天,Certbot安装时会自动创建续期定时任务。
>检查续期定时任务
Certbot使用systemd timer或cron job实现自动续期。检查timer是否激活:
>sudo systemctl status certbot.timer
如果显示active (waiting),说明自动续期已启用。
>测试续期流程
可以模拟续期过程,验证配置是否正确:
>sudo certbot renew --dry-run
如果没有错误信息,说明续期配置正常。
>手动续期命令
如果需要立即续期(非自动),可以运行:
>sudo certbot renew
第五步:优化Nginx SSL配置
为了提升安全性和性能,建议优化Nginx的SSL配置。
>配置SSL协议和加密套件
编辑Nginx配置文件(通常在/etc/nginx/sites-available/目录下),添加以下配置:
>ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
启用HSTS安全头
强制浏览器使用HTTPS连接:
>add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
配置SSL证书链
确保完整的证书链文件正确配置:
>ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
常见问题排查
>问题1:证书申请失败
原因:域名解析未生效或防火墙阻止了80/443端口。
解决方法:
确认域名A记录指向正确IP
检查防火墙规则:sudo ufw status
开放HTTP/HTTPS端口:sudo ufw allow 80/tcp && sudo ufw allow 443/tcp
>问题2:自动续期失败
原因:Certbot定时任务未运行或Nginx配置错误。
解决方法:
检查timer状态:sudo systemctl status certbot.timer
查看续期日志:sudo journalctl -u certbot.timer
手动测试续期:sudo certbot renew --dry-run
>问题3:浏览器显示证书不受信任
原因:证书链不完整或使用了自签名证书。
解决方法:
确认Nginx配置中使用的是fullchain.pem而非cert.pem
检查证书路径是否正确
重新运行Certbot配置
>高级配置:通配符证书
如果需要为所有子域名配置SSL(如*.yourdomain.com),需要使用DNS验证方式申请通配符证书。
>申请通配符证书
>sudo certbot -d yourdomain.com -d *.yourdomain.com --manual --preferred-challenges dns
按照提示在域名DNS管理中添加TXT记录完成验证。
>自动续期通配符证书
通配符证书续期需要自动化DNS验证。可以使用Certbot的DNS插件(如CloudDNS、Route53等),或编写自定义hook脚本。
>监控与维护
>设置证书到期监控
即使配置了自动续期,也建议设置监控告警:
1. 使用在线监控服务:如SSL Labs、SSL Shopper等
2. 编写监控脚本:定期检查证书到期时间
3. 配置邮件提醒:Certbot会在证书到期前30天发送提醒邮件
>监控脚本示例
>#!/bin/bash
DOMAIN="yourdomain.com"
EXPIRY_DATE=$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2>/dev/null | openssl x509 -noout -dates | grep notAfter | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( ($EXPIRY_TIMESTAMP - $CURRENT_TIMESTAMP) / 86400 ))
if [ $DAYS_LEFT -lt 30 ]; then
echo "SSL证书将在 $DAYS_LEFT 天后到期,请及时续期!"
fi
性能优化建议
>启用SSL会话复用
减少TLS握手次数,提升性能:
>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;
安全最佳实践
1. 定期更新系统:保持Ubuntu和Nginx最新版本
2. 使用强加密算法:禁用SHA1、RC4等弱加密算法
3. 启用HTTP/2:提升HTTPS性能
4. 配置Content Security Policy:防止XSS攻击
5. 定期审计SSL配置:使用SSL Labs等工具定期扫描
>结论
通过本文的详细步骤,你已经学会了在Ubuntu系统上为Nginx配置SSL证书并实现自动续期的完整流程。关键要点包括:
使用Certbot工具简化证书申请和配置
启用systemd timer实现自动续期
优化Nginx SSL配置提升安全性和性能
设置监控告警防止证书意外过期
配置完成后,你的网站将拥有有效的HTTPS加密,提升用户信任度和搜索引擎排名。记得定期检查证书状态和系统日志,确保一切正常运行。
>参考资源
Let's Encrypt官方网站:https://letsencrypt.org/
Certbot官方文档:https://certbot.eff.org/
Nginx SSL配置指南:https://nginx.org/en/docs/http/ngx_http_ssl_module.html
SSL Labs测试工具:https://www.ssllabs.com/ssltest/
---
*本文最后更新于2026年,适用于Ubuntu 20.04及以上版本。如有问题,请在评论区留言。*