用Let’s Encrypt给站点加HTTPS,最省事的方式是用Certbot。我两台雨云服务器都这么配的,跑了一年多没出过问题。
安装Certbot
系统是Ubuntu 22.04,直接走snap装,比apt版本新,自动续期也省心。
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
CentOS或Fedora用户用dnf:
sudo dnf install certbot python3-certbot-nginx
申请证书
两个场景:Nginx和独立服务器。
Nginx用户先确认配置文件加载了server_name,一行命令搞定:
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动修改Nginx配置,把80端口的请求重定向到443,证书文件存到/etc/letsencrypt/live/example.com/。
不用Nginx的用standalone模式,先停掉占用80端口的服务:
sudo systemctl stop nginx
sudo certbot certonly --standalone -d example.com -d www.example.com
sudo systemctl start nginx
证书文件在/etc/letsencrypt/live/example.com/下,四个文件:
– cert.pem:服务器证书
– chain.pem:中间证书链
– fullchain.pem:cert.pem + chain.pem合并版
– privkey.pem:私钥,别泄露
自动续期
Let’s Encrypt证书有效期90天,Certbot默认加了systemd timer自动续期。验证一下:
sudo systemctl status certbot.timer
手动模拟续期测试:
sudo certbot renew --dry-run
输出显示”Congratulations”就说明续期通道正常。实际续期每天跑两次,证书到期前30天才会真正续。
Nginx配置参考
如果不用Certbot自动改配置,手动配HTTPS server块:
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;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
常见问题
1. 申请失败提示”DNS problem”
检查域名解析,A记录指向服务器IP,TTL别设太长。
2. 提示”too many certificates already issued”
免费版每周每个域名最多50张证书,测试环境用–staging参数:
sudo certbot certonly --standalone -d example.com --staging
3. 续期报错”Failed to connect to ACME server”
检查服务器出站443端口,Let’s Encrypt的API地址是acme-v02.api.letsencrypt.org。
多域名泛域名证书
泛域名需要DNS验证,不支持HTTP验证。以Cloudflare为例:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
按提示去DNS管理面板添加TXT记录,验证完后证书里包含example.com和所有子域名。
迁移证书
换服务器时直接把/etc/letsencrypt整个目录打包过去,在新机器上重装Certbot后运行:
sudo certbot renew --force-renewal
或者手动复制证书文件到对应路径。
雨云那台服务器我迁移过一次,证书打包scp过去,续期命令跑一遍就认了,没出坑。
注意事项
– 私钥文件权限设600,属主root
– 别把privkey.pem提交到Git仓库
– 证书到期前30天自动续期,但建议每个月手动检查一次
– 如果用了CDN,CDN节点上的证书也要同步更新
配完HTTPS后去myssl.com测一下评级,A级算及格,A+需要配HSTS和OCSP Stapling。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容