从Let's Encrypt获取免费SSL证书是提升网站安全性最明智的决定。Certbot是一个功能强大的官方工具,专门用于自动化申请、安装和续期Let's Encrypt的SSL证书。本完整指南将逐步引导您在运行Nginx的Ubuntu VPS上安装Certbot,获取第一个SSL证书,并配置自动续期功能。
理解Certbot和Let's Encrypt
Let's Encrypt是一个非营利的认证中心,为全球任何人提供免费的SSL证书,目标是使加密连接成为互联网的默认方式。Certbot是由电子前沿基金会(EFF)创建的强大客户端软件,可以处理所有繁重工作——申请证书、验证域所有权、在Web服务器上安装证书,以及在过期前自动续期。
- 100%免费 — 没有任何费用,没有隐藏收费
- 自动续期 — 设置一次后无需担心证书过期
- 通配符支持 — 可以申请涵盖子域名的通配符证书(如*.example.com)
- 浏览器信任 — 证书被所有现代浏览器和设备认可
- 企业级加密 — 提供与商业付费证书相同级别的安全性
开始前的准备条件
为了确保顺利完成安装过程,请验证您具有以下所有要求:
- Ubuntu VPS(20.04、22.04或24.04版本)并具有root或sudo访问权限
- 已安装并在端口80和443上运行的Nginx Web服务器
- 已注册的域名,其DNS A记录指向VPS的IP地址
- 防火墙规则允许端口80(HTTP)和443(HTTPS)的入站流量
- 具有安装新软件包的sudo权限
第一步 — 安装Certbot和Nginx插件
Certbot可以在Ubuntu的标准包存储库中获得。首先更新包管理器缓存,然后安装Certbot和Nginx插件:
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-nginx
软件包python3-certbot-nginx提供Nginx插件支持,允许Certbot自动修改Nginx配置文件并在正确位置安装SSL证书。没有此插件,您需要在获取证书后手动配置Nginx。
第二步 — 准备并验证Nginx配置
Certbot依靠您的Nginx配置来识别证书生成的正确域名。在申请证书前,确保Nginx配置文件包含适当的server_name指令:
sudo nano /etc/nginx/sites-available/default
您的配置应该如下所示:
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;
}
}
编辑后,测试Nginx配置语法:
sudo nginx -t
输出应显示nginx: configuration file test is successful。如果看到错误,请在继续前仔细查看配置文件。
⚠️ 重要:Certbot使用server_name条目来确定证书应包含哪些域。不正确的server_name值将导致Certbot失败或为错误的域创建证书。
第三步 — 从Let's Encrypt申请SSL证书
现在您已准备好申请第一个SSL证书。Certbot将通过在您的Web根目录中创建临时文件来证明域所有权,Let's Encrypt服务器可以验证该文件。使用您的实际域名运行此命令:
sudo certbot certonly --nginx -d example.com -d www.example.com
Certbot会提示您输入电子邮件地址并接受Let's Encrypt服务条款。验证成功后,记下输出中显示的证书位置。它们通常位于:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem
这些路径对于在下一步中配置Nginx很重要。
第四步 — 配置Nginx使用SSL证书
有了证书后,需要修改Nginx配置以使用它们。再次编辑服务器配置文件:
sudo nano /etc/nginx/sites-available/default
用处理HTTP和HTTPS流量的改进版本替换整个server块:
# 将所有HTTP流量重定向到HTTPS
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
# 主HTTPS服务器块
server {
listen 443 ssl http2;
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_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
root /var/www/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
重新加载前测试配置:
sudo nginx -t
如果测试通过,重新加载Nginx应用更改:
sudo systemctl reload nginx
第五步 — 启用和配置自动续期
由于Let's Encrypt证书每90天过期一次,自动续期至关重要。Ubuntu提供systemd计时器每天运行Certbot。使用以下命令启用它:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
验证计时器是否处于活动状态:
sudo systemctl status certbot.timer
在不实际续期的情况下测试续期过程(验证设置):
sudo certbot renew --dry-run
如果没有错误,您的自动续期配置正确。Certbot现在每天检查一次,在过期前30天时续期证书。
第六步 — 验证SSL安装和测试功能
在Web浏览器中访问您的域,查找这些SSL安装成功的指示符:
- 地址栏中显示绿色挂锁图标或"安全"标签
- 没有浏览器警告或安全警告信息
- HTTP(非HTTPS)URL自动重定向到HTTPS
- 没有混合内容警告(所有资源通过HTTPS加载)
如需详细的安全评估,使用Qualys SSL Server Test,访问https://www.ssllabs.com/ssltest/。输入您的域名并等待综合报告。此工具检查弱配置并给您的服务器打分。
💡 提示:切换到HTTPS后,更新您的sitemap.xml和robots.txt以使用HTTPS URL。还要更新网站内容中的任何内部链接以使用HTTPS。这可以帮助搜索引擎在HTTPS版本下正确索引您的网站。
高级:设置通配符SSL证书
如果您需要为所有子域名(*.example.com)提供SSL覆盖,可以申请通配符证书。这需要DNS域验证而不是HTTP验证:
sudo certbot certonly --manual --preferred-challenges=dns -d example.com -d *.example.com
Certbot将显示您需要添加到域DNS提供商的DNS TXT记录。过程如下:
- Certbot显示所需的TXT记录名称和值
- 登录您的DNS提供商(Cloudflare、Namecheap、GoDaddy等)
- 将TXT记录添加到您的DNS记录
- 返回Certbot并按Enter键验证
- Certbot验证域所有权并颁发通配符证书
证书随后将覆盖example.com、*.example.com和该主域下的任何其他子域。
故障排查常见问题
错误:"无法连接到续期服务器"
此错误表示连接问题。验证您的服务器具有互联网访问权限且DNS解析工作正常:
nslookup example.com
curl -I https://www.google.com
检查防火墙规则是否阻止到Let's Encrypt服务器的出站连接。
错误:"连接超时"或"连接被拒绝"
域的DNS A记录可能尚未指向您的VPS IP。使用以下命令验证:
dig example.com
如果ANSWER部分中的IP不匹配您的VPS,在域名注册商处更新DNS并等待24-48小时以传播。
端口80访问被拒绝
Certbot需要端口80开放用于验证检查。检查防火墙是否阻止:
sudo ufw status
sudo iptables -L -n | grep 80
如果被阻止,允许这些端口:
sudo ufw allow 80
sudo ufw allow 443
sudo ufw reload
证书尽管设置了自动续期仍然过期
检查续期计时器是否实际运行:
sudo journalctl -u certbot.timer -n 50
如果续期失败,检查续期日志:
sudo cat /var/log/letsencrypt/letsencrypt.log | tail -50
您可以强制立即续期:
sudo certbot renew --force-renewal
总结和最佳实践
使用Certbot在Nginx上安装SSL证书既简单又提供企业级加密,完全无需成本。通过遵循这六个步骤并设置自动续期,您确保您的网站始终具有有效的HTTPS保护。记住定期监控续期日志,并随着新安全改进的发布保持Certbot更新。您的网站访客将感谢HTTPS提供的额外安全性和改进的信任信号。
需要用于Certbot和Nginx设置的VPS?
AsiaGB提供具有完全root访问权限的Ubuntu VPS,非常适合SSL证书自动化和Web服务器管理。起价仅为500泰铢/月,提供99%的正常运行时间保证。
立即开始使用AsiaGB VPS