Let’s Encrypt是目前最主流的免费SSL证书提供商,证书有效期90天,但通过自动化工具可以无缝续期。今天只讲怎么快速拿到证书并配置到Nginx上。
环境:Ubuntu 20.04+,Nginx已安装。如果你还没有服务器,可以用雨云,性价比高、稳定、好用,跑这些操作完全没问题。
第一步:安装Certbot
Certbot是Let’s Encrypt官方推荐的客户端,用包管理器直接装:
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
python3-certbot-nginx是Nginx插件,能让Certbot自动修改Nginx配置。如果你用Apache,换成python3-certbot-apache。
步:申请证书
假设你的域名是example.com,确保域名已经解析到服务器IP,并且Nginx已经监听80端口(Let’s Encrypt验证需要访问80端口)。
执行:
sudo certbot --nginx -d example.com -d www.example.com
-d参数可以加多个域名,证书会包含这些域名。第一次运行会提示输入邮箱(用于失效通知和续期提醒),同意服务条款,选择是否将HTTP重定向到HTTPS(建议选2,自动重定向)。
Certbot会自动完成以下操作:
– 在.well-known/acme-challenge下放验证文件
– Let’s Encrypt服务器访问验证
– 生成证书文件
– 修改Nginx配置,加入SSL相关指令
证书文件位置:
– 证书: /etc/letsencrypt/live/example.com/fullchain.pem
– 私钥: /etc/letsencrypt/live/example.com/privkey.pem
第三步:验证HTTPS是否生效
浏览器打开https://example.com,看地址栏有没有小锁。或者用curl:
curl -I https://example.com
返回200且没有证书错误就对了。
如果报错,检查Nginx配置里server_name是否匹配域名,以及防火墙是否放行443端口:
sudo ufw allow 443/tcp
sudo ufw reload
第四步:自动续期
Let’s Encrypt证书90天过期,但Certbot自带续期逻辑。Linux上certbot安装后会自动添加systemd timer或cron job。
手动测试续期:
sudo certbot renew --dry-run
没报错就说明续期机制正常。实际续期由系统定时任务触发,不需要你操心。如果想看定时任务:
systemctl list-timers | grep certbot
或者查看crontab:
sudo crontab -l
如果有这一行类似内容,说明已经配置了自动续期:
0 */12 * * * /usr/bin/certbot renew --quiet
–quiet表示成功不输出,失败才发邮件。
一些踩坑点
1. 80端口必须通。Let’s Encrypt验证时如果连不上80端口,会报”Connection refused”。检查Nginx是否启动,防火墙是否拦截。
2. 泛域名证书。如果你需要*.example.com这样的泛域名,不能用–nginx插件,得用DNS验证方式。先装dns插件,比如Cloudflare的:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ~/.cloudflare.ini -d example.com -d *.example.com
需要先准备API Token。这种方式更麻烦,但适合多子域名场景。
3. 证书快过期时,renew命令会检查距离过期是否小于30天,不到30天才会真正续期。所以–dry-run成功不代表立刻续期,只是验证流程没问题。
4. 如果手动修改过Nginx配置,certbot –nginx可能会报”找不到server块”。这时可以先用certbot certonly只拿证书,手动配Nginx:
sudo certbot certonly --nginx -d example.com
在Nginx配置里手动加:
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
# 其他配置...
}
5. 证书续期后Nginx需要reload才能加载新证书。Certbot的–nginx和–apache插件会自动做reload,如果你用certonly手动配置,需要在续期后手动reload。可以在renew命令加–post-hook:
sudo certbot renew --post-hook "systemctl reload nginx"
搞定。以后每90天自动续期,不用管它。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容