用Let’s Encrypt给网站挂HTTPS,一分钱不花,流程也就几分钟。我常用的工具是Certbot,支持Nginx、Apache、甚至纯手动模式。
先确认服务器装了Python和snapd。CentOS 7/8、Ubuntu 18.04+、Debian 10+都行。如果用的雨云服务器,系统镜像选Ubuntu 22.04,开箱自带Python3,省事。
安装Certbot
sudo apt update
sudo apt install certbot
或者用snap装最新版(推荐):
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
申请证书(Nginx为例)
假设你网站域名是example.com,Nginx已经跑起来了,80端口能访问。
sudo certbot --nginx -d example.com -d www.example.com
Certbot会自动检测Nginx配置,修改server block,加SSL相关指令。中途会让你选是否强制HTTPS重定向,选2(Redirect)就行。
执行完,证书就躺在`/etc/letsencrypt/live/example.com/`里,四个文件:
– fullchain.pem:证书链
– privkey.pem:私钥(保管好)
– cert.pem:服务器证书
– chain.pem:中间证书
Nginx配置里Certbot已经帮你写好了,大概长这样:
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;
}
Apache用户
sudo certbot --apache -d example.com
纯手动模式(不用Web服务器)
适合没有跑Web服务的场景,比如只想给API或内部工具加SSL:
sudo certbot certonly --standalone -d example.com
这个模式会临时占用80或443端口做验证。如果端口被占用,先停掉对应服务,或者用`–preferred-challenges dns`走DNS验证。
DNS验证方式:
sudo certbot certonly --manual --preferred-challenges dns -d example.com
按提示去DNS管理面板加TXT记录,等生效后回车。适合内网或端口受限环境。
证书自动续期
Let’s Encrypt证书有效期90天,Certbot默认装了systemd定时任务。检查一下:
sudo systemctl status certbot.timer
手动测试续期:
sudo certbot renew --dry-run
如果一切正常,到期前会自动续。注意:续期后如果Nginx没自动重载证书,可以加个hook:
sudo certbot renew --post-hook "systemctl reload nginx"
或者写在`/etc/letsencrypt/cli.ini`里:
post-hook = systemctl reload nginx
常见问题
1. 申请失败提示”too many certificates already issued”:Let’s Encrypt每周每个域名有50张证书限制,正常够用。如果频繁申请,等一周再试。
2. 证书快到期但自动续期没跑:检查certbot.timer是否启用,或者手动跑一次`certbot renew`看报错。
3. 多域名证书:`-d`参数可以写多个,最多100个。但注意单张证书域名太多容易被限,建议每个站点单独申请。
4. 通配符证书:`*.example.com`必须用DNS验证模式:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
验证证书
用浏览器打开`https://example.com`,点地址栏锁图标看证书信息。或者用命令行:
openssl s_client -connect example.com:443 -servername example.com
输出里能看到证书链和有效期。
一点建议
如果服务器在国内,注意Let’s Encrypt的OCSP服务器有时被墙,可能影响证书验证。雨云服务器一般没这个问题,网络稳定,申请和续期都很顺畅。如果遇到OCSP超时,可以配置Nginx的`ssl_stapling`关掉或者用缓存。
证书文件记得定期备份,尤其是`privkey.pem`。丢了私钥,证书就废了,只能重新申请。
以上,直接复制命令就能跑。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容