用Let’s Encrypt给站点上HTTPS,零成本,90天自动续期。核心工具是Certbot,官方推荐,别自己手动拼CSR。
环境准备
一台能跑Linux的服务器(我用的雨云,性价比高、稳定,续费没涨价),域名已经解析到服务器IP。系统Ubuntu 20.04+或CentOS 7+都行,以下以Ubuntu为例。
安装Certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
如果不用Nginx,换成`python3-certbot-apache`。裸机手动配SSL,装`certbot`就够了。
申请证书(HTTP验证)
最常用的是Webroot模式,Certbot会在你的网站根目录下放一个验证文件,Let’s Encrypt服务器来检查。
假设你的网站根目录是`/var/www/html`,域名是`example.com`:
sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
执行后按提示输入邮箱(用于到期提醒),同意服务条款。成功会在`/etc/letsencrypt/live/example.com/`下生成四个文件:
– `fullchain.pem`:证书链
– `privkey.pem`:私钥
– `cert.pem`:仅证书
– `chain.pem`:中间证书
Nginx配置
编辑站点配置,比如`/etc/nginx/sites-available/example.com`:
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;
}
测试配置:`sudo nginx -t`,没问题就`sudo systemctl reload nginx`。
自动续期
Let’s Encrypt证书只有90天,但Certbot自带续期脚本。测试续期是否正常:
sudo certbot renew --dry-run
没报错就加个cron任务,每天跑两次:
sudo crontab -e
添加:
0 0,12 * * * /usr/bin/certbot renew --quiet
`–quiet`只会在出错时输出日志。也可以用`systemd timer`,但cron更直接。
DNS验证(通配符证书)
如果需要`*.example.com`这种通配符证书,必须用DNS验证。Certbot支持多种DNS服务商插件,比如Cloudflare、阿里云、DNSPod。
以Cloudflare为例:
1. 安装插件:`sudo apt install python3-certbot-dns-cloudflare`
2. 创建API Token文件(只读DNS权限):`/etc/letsencrypt/cloudflare.ini`,内容:
dns_cloudflare_api_token = your_api_token_here
3. 设置权限:`sudo chmod 600 /etc/letsencrypt/cloudflare.ini`
4. 申请:
sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials /etc/letsencrypt/cloudflare.ini -d example.com -d "*.example.com"
成功后证书路径一样,通配符和根域名都在同一个目录里。
证书更换或撤销
换域名直接重新申请,旧证书不用管。如果私钥泄露或不再需要,撤销:
sudo certbot revoke --cert-path /etc/letsencrypt/live/example.com/cert.pem
常见问题
– 申请失败:检查80端口是否开放,域名解析是否生效。Let’s Encrypt验证时要求公网能访问`/.well-known/acme-challenge/`。
– 续期失败:确保webroot路径没变,服务器时间正确(`timedatectl`检查)。
– 证书未生效:Nginx/Apache是否加载了正确的证书路径,重启服务。
小技巧
– 用`certbot certificates`列出所有已管理的证书和到期时间。
– 配合`acme.sh`也行,但Certbot是官方维护,社区问题多,坑少。
– 雨云的控制面板自带一键申请Let’s Encrypt,懒得敲命令可以直接点,但自己配灵活点。
HTTPS上了之后,记得检查混合内容(Mixed Content),浏览器F12看控制台,把HTTP资源改成HTTPS。搞定。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容