Certbot与Nginx配置SSL证书及自动续签指南
# Certbot与Nginx配置SSL证书及自动续签指南
# 目录
# 简介
Certbot是一个免费的开源软件工具,用于自动使用Let's Encrypt证书来启用HTTPS。本指南将帮助您使用Certbot为Nginx服务器配置SSL证书,并设置自动续签机制,确保您的网站始终保持安全连接。
# 前提条件
- 一个已注册的域名
- 一个运行Nginx的服务器
- 服务器上的root或sudo权限
- 域名已正确解析到您的服务器IP
# 安装Certbot
# Ubuntu/Debian系统
# 更新软件包列表
sudo apt update
# 安装Certbot和Nginx插件
sudo apt install certbot python3-certbot-nginx
2
3
4
5
# CentOS/RHEL系统
# 安装EPEL仓库
sudo yum install epel-release
# 安装Certbot和Nginx插件
sudo yum install certbot python3-certbot-nginx
2
3
4
5
# Windows系统
在Windows上,您可以使用以下方法安装Certbot:
- 安装Chocolatey (opens new window)包管理器
- 使用Chocolatey安装Certbot:
choco install certbot
# 获取SSL证书
# 自动配置Nginx(推荐)
Certbot可以自动修改Nginx配置以添加SSL设置:
sudo certbot --nginx -d example.com -d www.example.com
替换example.com和www.example.com为您的域名。
# 仅获取证书(手动配置Nginx)
如果您希望手动配置Nginx:
sudo certbot certonly --nginx -d example.com -d www.example.com
# 配置Nginx
如果您选择手动配置Nginx,请按照以下步骤操作:
- 编辑您的Nginx站点配置文件(通常位于
/etc/nginx/sites-available/目录下)
sudo nano /etc/nginx/sites-available/example.com
- 添加或修改配置以包含SSL设置:
server {
listen 80;
server_name example.com www.example.com;
# 将HTTP请求重定向到HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
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 on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
# 网站根目录
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
- 测试Nginx配置并重新加载:
sudo nginx -t
sudo systemctl reload nginx
2
# 自动续签设置
Let's Encrypt证书有效期为90天,需要定期续签。Certbot会自动安装一个定时任务来处理续签:
# Linux系统
检查自动续签任务是否已安装:
sudo systemctl list-timers | grep certbot
如果没有自动安装,您可以手动创建一个cron任务:
sudo crontab -e
添加以下行:
0 3 * * * certbot renew --quiet && systemctl reload nginx
这将在每天凌晨3点检查并续签证书,然后重新加载Nginx。
# Windows系统
在Windows上,您可以使用任务计划程序创建定期任务:
- 打开任务计划程序
- 创建基本任务
- 设置每天或每周运行
- 设置操作为运行程序:
certbot renew --quiet
# 故障排除
# 常见问题
证书申请失败
- 确保域名正确解析到服务器IP
- 检查服务器防火墙是否允许80和443端口
- 查看Certbot日志:
/var/log/letsencrypt/
Nginx配置错误
- 使用
sudo nginx -t检查配置语法 - 检查证书路径是否正确
- 使用
证书续签失败
- 手动测试续签过程:
sudo certbot renew --dry-run - 检查cron任务或计划任务是否正确设置
- 手动测试续签过程:
# 验证SSL配置
您可以使用在线工具如SSL Labs (opens new window)测试您的SSL配置安全性。
# 最佳实践
定期监控证书状态
- 设置证书过期提醒
- 使用监控工具检查HTTPS状态
安全增强
- 配置HTTP严格传输安全(HSTS)
- 考虑使用Content Security Policy(CSP)
备份证书
- 备份
/etc/letsencrypt目录 - 记录证书续签流程
- 备份
本指南提供了使用Certbot和Nginx配置SSL证书的基本步骤。根据您的具体环境和需求,可能需要进行额外的配置调整。请确保遵循最新的安全最佳实践,保持您的服务器和证书更新。
# 使用Caddy配置SSL证书
Caddy是一个现代化的Web服务器,它内置了自动HTTPS功能,可以自动申请、配置和续签SSL证书。相比Nginx+Certbot的组合,Caddy提供了更简单的配置方式。
# 安装Caddy
# Ubuntu/Debian系统
# 安装依赖
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
# 添加Caddy官方源
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
# 更新包列表并安装Caddy
sudo apt update
sudo apt install caddy
2
3
4
5
6
7
8
9
10
# CentOS/RHEL系统
yum install yum-plugin-copr
yum copr enable @caddy/caddy
yum install caddy
2
3
# Windows系统
在Windows上,您可以使用以下方法安装Caddy:
- 使用Chocolatey (opens new window)包管理器安装:
choco install caddy
- 或者从Caddy官网 (opens new window)下载可执行文件。
# 自动HTTPS配置
Caddy的一大特点是默认启用自动HTTPS。只需要简单的配置文件就可以启用HTTPS:
- 创建或编辑Caddyfile:
example.com {
root * /var/www/example.com
file_server
}
2
3
4
这个最小配置就足够了!Caddy会自动:
- 申请Let's Encrypt证书
- 配置SSL/TLS设置
- 处理证书续签
- 配置HTTP到HTTPS的重定向
# 手动SSL证书配置
如果您需要使用自己的SSL证书,可以这样配置:
example.com {
tls /path/to/cert.pem /path/to/key.pem
root * /var/www/example.com
file_server
}
2
3
4
5
# 高级TLS配置
example.com {
tls {
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
curves x25519 secp521r1 secp384r1 secp256r1
alpn h2 http/1.1
}
root * /var/www/example.com
file_server
}
2
3
4
5
6
7
8
9
10
# 启动Caddy服务
# Linux系统(systemd)
sudo systemctl start caddy
sudo systemctl enable caddy
# Windows系统(PowerShell管理员模式)
Start-Service -Name caddy
Set-Service -Name caddy -StartupType Automatic
2
3
4
5
6
7
# Caddy vs Nginx+Certbot的优势
简化的SSL配置
- 自动HTTPS,无需额外的证书管理工具
- 自动处理证书续签,无需cron任务
- 更简洁的配置语法
现代化特性
- 默认启用HTTP/2和HTTP/3
- 自动OCSP Stapling
- 智能TLS证书管理
安全性
- 默认启用安全的TLS配置
- 自动处理HTTPS重定向
- 内置安全头部
性能优化
- 自动压缩
- 智能静态文件服务
- 高效的反向代理
# Lucky
Lucky是一个专为软硬路由设计的网络工具套件,主要运行在软路由系统上。以下是Lucky的主要特性和功能:https://github.com/gdy666/lucky (opens new window)
# 主要特性
网络代理功能
- IPv6/IPv4端口转发
- 反向代理服务
- STUN内网穿透
网络管理工具
- DDNS动态域名解析
- WOL网络唤醒
- 定时任务(cron)支持
SSL证书管理
- 集成ACME协议
- 自动申请和续签SSL证书
文件服务功能
- 阿里云盘集成
- FTP服务
- WebDAV支持
- File Browser文件管理
# 部署说明
- 支持一键安装部署
- 提供Docker容器化部署方案
- 支持OpenWrt IPK包安装
# 使用建议
对于初学者来说,建议将Lucky部署在主路由设备上以获得最佳的网络穿透效果https://lucky666.cn/docs/modules/stun/ (opens new window)。虽然Lucky提供了丰富的功能集,但每个模块的专业度相对较为基础,适合个人或小型网络环境使用https://post.smzdm.com/p/a3x63wrr/ (opens new window)