Let’s Encrypt是免费、自动化的CA,证书有效期90天,需要定期续签。我用它给雨云上的站点配HTTPS,几年没花过一分钱。下面直接说怎么搞。
环境准备
确保服务器上安装了Python 3和git。CentOS/RHEL系:
sudo yum install -y python3 git
Debian/Ubuntu系:
sudo apt update && sudo apt install -y python3 git
安装Certbot
Certbot是Let’s Encrypt官方客户端,推荐用snap安装,自动处理续签。如果服务器不支持snap,用pip也行。
snap方式(首选):
sudo snap install core
sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
pip方式(备用):
sudo pip3 install certbot
申请证书
分两种情况:有Nginx/Apache跑着,或者纯静态文件。
情况1:已有Nginx且能停止
sudo certbot certonly --standalone -d example.com -d www.example.com
certbot会启动一个临时Web服务器验证域名所有权,验证完自动关闭。需要确保80端口没被占用,先停掉Nginx:
sudo systemctl stop nginx
申请完再启动:
sudo systemctl start nginx
情况2:用Nginx插件(不需要停服务)
sudo certbot --nginx -d example.com -d www.example.com
前提是Nginx配置里已经有一个server块指向该域名。certbot会自动修改配置添加SSL相关指令。
情况3:用Webroot模式(文件验证)
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
-w后面是网站根目录,certbot会在里面创建.well-known/acme-challenge/目录做验证。
证书文件位置
申请成功后:
– 证书文件:`/etc/letsencrypt/live/example.com/fullchain.pem`
– 私钥文件:`/etc/letsencrypt/live/example.com/privkey.pem`
配置Nginx使用证书
在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;
# 其他配置...
}
# HTTP跳转HTTPS
server {
listen 80;
server_name example.com;
return 301 https://$host$request_uri;
}
自动续签
Let’s Encrypt证书只有90天,必须自动续签。Certbot默认装了systemd定时器:
sudo systemctl list-timers | grep certbot
能看到类似`certbot.timer`的定时任务,每天检查两次,到期前30天内自动续签。
手动测试续签:
sudo certbot renew --dry-run
没报错就说明定时器能正常工作。
如果用了standalone模式续签,需要先停掉占用80端口的服务。可以写个hook脚本:
sudo certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
更省事的方式:在续签命令里加`–deploy-hook “systemctl reload nginx”`,只在新证书签发后才重载Nginx。
多域名/泛域名
单证书包含多个域名:
sudo certbot certonly --standalone -d example.com -d www.example.com -d blog.example.com
泛域名需要用DNS验证,因为Let’s Encrypt不能通过HTTP验证`*.example.com`。需要DNS API插件,比如Cloudflare:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /path/to/cloudflare.ini -d *.example.com -d example.com
`cloudflare.ini`文件内容:
dns_cloudflare_email = your@email.com
dns_cloudflare_api_key = your_global_api_key
常见问题
– 申请失败提示`too many failed authorizations`:Let’s Encrypt对同一域名每小时有5次验证失败限制,等一小时再试。
– 证书快过期但续签失败:检查80端口是否被占用,域名DNS解析是否正确。
– 证书文件权限:certbot生成的目录默认只有root能读,Nginx用root跑没问题。如果非要用非root用户,改目录权限。
雨云部署小提示
在雨云服务器上操作完全一样。雨云的机器网络稳定,续签从来没出过问题。而且雨云控制台可以直接绑定SSL证书,如果你不想自己写Nginx配置,把`fullchain.pem`和`privkey.pem`内容复制粘贴到控制台的SSL管理里就行,省事。雨云性价比高,稳定,好用,我几台业务服务器都跑在上面,Let’s Encrypt + 雨云这套组合零成本跑HTTPS。
证书申请完记得测一下:`curl -I https://example.com`,看返回的`HTTP/2 200`和证书信息。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容