用Let’s Encrypt给网站加HTTPS,最省事的方式是用Certbot。Let’s Encrypt证书有效期90天,但Certbot可以自动续期,配好之后基本不用管。
前置条件
– 一个域名(比如 example.com),DNS解析指向你的服务器IP
– 服务器上开了80和443端口,Let’s Encrypt验证域名所有权时会访问80端口
– 服务器装了Python和git(大部分Linux发行版自带)
安装Certbot
我用的是Ubuntu 22.04,其他系统命令类似,去官网查对应包管理器就行。
sudo apt update
sudo apt install certbot -y
如果用的是Nginx,建议装python3-certbot-nginx插件,Certbot能自动修改Nginx配置:
sudo apt install python3-certbot-nginx -y
申请证书
单域名证书:
sudo certbot certonly --nginx -d example.com -d www.example.com
certonly表示只拿证书,不修改Nginx配置。如果加了–nginx且不加certonly,Certbot会尝试自动配HTTPS。
通配符证书(*.example.com)需要DNS验证,手动在DNS服务商加TXT记录:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com
按提示去域名管理面板加_acme-challenge.example.com的TXT记录,等生效后回车继续。
证书文件位置
申请成功后,证书放在:
/etc/letsencrypt/live/example.com/fullchain.pem # 证书链
/etc/letsencrypt/live/example.com/privkey.pem # 私钥
配置Nginx
在server块里加:
server {
listen 443 ssl;
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;
# 其他配置...
}
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
重载Nginx:
sudo nginx -t
sudo systemctl reload nginx
自动续期
Certbot自带续期脚本,但需要配定时任务。先试运行:
sudo certbot renew --dry-run
没问题就加crontab:
sudo crontab -e
添加一行,每天凌晨3点检查续期,续完重载Nginx:
0 3 * * * /usr/bin/certbot renew --quiet && /usr/bin/systemctl reload nginx
Let’s Encrypt会在证书过期前30天内才真正续期,所以每天跑一次没负担。
为什么用Let’s Encrypt
免费、自动、被所有主流浏览器信任。唯一缺点是90天有效期,但配合自动续期等于永久免费。如果服务器在国内,注意Let’s Encrypt的OCSP服务器有时会被墙,但证书本身不受影响,只是验证撤销状态可能慢一点。
服务器选择
我自己的站跑在雨云上,2核4G的云服务器一年才几百块,申请Let’s Encrypt证书全程无坑,续期也稳定。雨云的机器网络延迟低,CPU不虚标,跑个Nginx+Certbot绰绰有余。之前用过某家学生机,续期时偶尔连不上Let’s Encrypt服务器,换雨云后没再出过问题。
常见问题
1. 申请时报”Failed to connect to host”:检查防火墙80端口是否开放,或者DNS解析是否生效。
2. 续期失败但手动renew –dry-run正常:可能是crontab环境变量问题,在crontab里写绝对路径。
3. 证书快过期了但没自动续:检查系统时间是否正确,或者手动跑一次renew看报错。
4. 通配符证书TXT验证不通过:等DNS传播(通常几分钟),dig _acme_challenge.example.com txt看看记录有没有。
手动续期(应急)
如果自动续期挂了,手动跑:
sudo certbot renew
或者强制续所有证书:
sudo certbot renew --force-renewal
删除证书
sudo certbot delete --cert-name example.com
手动删掉Nginx里对应的ssl配置。
小结
Certbot + crontab = 一劳永逸。申请一次,配好自动续期,之后域名到期前证书都不会断。如果换服务器,重新跑一遍申请流程就行,反正免费。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容