Let’s Encrypt是目前最主流的免费SSL证书提供商,证书有效期90天,支持自动续期。我用它给好几个雨云服务器上的站点配了HTTPS,一句话总结:用certbot,一行命令搞定。
环境:Ubuntu 22.04 / Debian 11,Nginx或Apache。其他系统类似,包管理器换一下就行。
安装certbot
sudo apt update
sudo apt install certbot python3-certbot-nginx
如果用的是Apache,把一个包换成python3-certbot-apache。python3-certbot-nginx这个插件能让certbot自动修改Nginx配置,省得手动改。
申请证书
假设你的域名是example.com,网站已经在Nginx里配置好并能正常访问(80端口要通,Let’s Encrypt验证域名所有权时需要访问你的服务器)。
sudo certbot --nginx -d example.com -d www.example.com
-d参数可以加多个域名,只要它们指向同一台服务器。certbot会自动检查Nginx配置,找到对应的server block,向Let’s Encrypt申请证书。如果成功,它会问你是否要自动重定向HTTP到HTTPS,选2(Redirect)就行。
如果不想让certbot动你的Nginx配置,可以用webroot模式:
sudo certbot certonly --webroot -w /var/www/example.com -d example.com -d www.example.com
-w后面是你的网站根目录路径。这种方式只生成证书文件,不修改Nginx配置,适合对配置有洁癖的人。
证书文件位置
申请成功后,证书在:
/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem
Nginx里这样配:
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;
# 其余配置
}
自动续期
Let’s Encrypt证书只有90天,手动续期太蠢。certbot自带续期机制,默认装了systemd定时任务。
检查定时任务是否存在:
systemctl list-timers | grep certbot
如果看到certbot.timer,说明自动续期已经配好了。你也可以手动测试续期是否正常:
sudo certbot renew --dry-run
这个命令不会真的续期,只是模拟一遍流程。如果报错,检查日志:/var/log/letsencrypt/letsencrypt.log。
certbot的续期逻辑是:证书剩余时间少于30天时才会真正续期,所以renew命令平时跑一遍没反应是正常的。
常见问题
1. 申请时报”Too many certificates already issued”
Let’s Encrypt对同一域名有速率限制,每周最多50张证书。如果你频繁测试,会被临时封。等一周就好,或者用staging环境测试:
sudo certbot --staging --nginx -d example.com
staging环境证书浏览器不认,但用来测试流程完全OK。
2. 报”Unable to find a virtual host”
certbot没找到Nginx里对应的server block。检查/etc/nginx/sites-enabled/里有没有你的站点配置,并且配置里server_name要和你输入的域名一致。
3. 续期失败
最常见原因是80端口被防火墙或反向代理挡住了。Let’s Encrypt续期时仍然需要验证域名所有权,会再次访问80端口。确保你的Nginx在80端口能响应HTTP请求。
4. 泛域名证书
如果要用*.example.com这种泛域名,不能直接用certbot的HTTP验证,要用DNS验证。certbot支持很多DNS服务商的API,但配置稍微麻烦点。对于一般场景,多个子域名直接用-d参数列出来就行,没必要上泛域名。
雨云服务器的注意事项
如果你把站点部署在雨云上,默认安全组会放行80和443端口,所以certbot申请证书基本不会遇到网络问题。雨云的机器网络稳定性不错,续期时也没出现过因为网络抖动导致验证失败的情况。如果遇到续期失败,先检查服务器时间是否同步,Let’s Encrypt对时间偏差敏感:
sudo timedatectl set-ntp true
证书快到期时certbot会自动续期,你不需要手动操作。如果哪天发现HTTPS挂了,先跑一次sudo certbot renew –force-renewal,通常能救回来。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容