用Let’s Encrypt给站点加HTTPS,本质就三步:装客户端、验证域名所有权、配置证书自动续期。不需要花一分钱。下面直接说操作。
环境准备
服务器是Ubuntu 22.04,Nginx。其他Linux发行版命令大同小异。
第一步,安装Certbot客户端。Certbot是Let’s Encrypt官方推荐的工具,负责自动申请、安装、续期证书。
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
`python3-certbot-nginx`是Nginx插件,能让Certbot自动修改Nginx配置。如果你用Apache,就装`python3-certbot-apache`。
申请证书
假设你的域名是`example.com`,要同时给`www.example.com`也加上证书。
sudo certbot --nginx -d example.com -d www.example.com
这条命令会做几件事:
1. 连接到Let’s Encrypt服务器。
2. 验证你对域名的所有权——Certbot会在你的Nginx站点根目录下放一个临时文件,Let’s Encrypt服务器通过HTTP访问这个文件来确认域名指向你的服务器。
3. 验证通过后,自动下载证书文件。
4. 自动修改Nginx配置,把HTTP重定向到HTTPS,并启用证书。
如果Nginx配置有问题,或者端口80/443没开放,会报错。检查防火墙:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload
申请过程中会问你是否要强制HTTPS重定向,选`2`(Redirect)。这样访问`http://example.com`会自动跳转到`https://example.com`。
证书文件位置
申请成功后,证书文件在`/etc/letsencrypt/live/example.com/`目录下:
– `fullchain.pem`:证书链文件,Nginx配置里用这个。
– `privkey.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;
# ... 其他配置
}
自动续期
Let’s Encrypt证书有效期90天,必须续期。Certbot自带续期功能,一般通过cron或systemd timer自动执行。
先测试续期是否能正常工作:
sudo certbot renew --dry-run
如果输出显示成功,说明配置没问题。Certbot安装时会自动添加一个systemd timer,每天检查两次,证书到期前30天自动续期。
确认timer是否启用:
sudo systemctl status certbot.timer
如果没启用,手动开启:
sudo systemctl enable certbot.timer
sudo systemctl start certbot.timer
不想用timer,也可以写cron任务,每天凌晨执行一次:
0 3 * * * /usr/bin/certbot renew --quiet
`–quiet`表示成功时不输出日志,只有出错才发邮件。
常见问题
– 申请时提示`Domain not found`:检查DNS解析,确保域名A记录指向你服务器的IP。用`dig example.com`验证。
– 提示`Failed to connect`:防火墙没开80或443端口,或者Nginx没启动。
– 提示`Too many certificates already issued`:Let’s Encrypt有速率限制,每周每个域名最多50个证书。测试环境用`–staging`参数避免触发限制。
如果服务器是雨云
雨云的服务器默认网络配置比较干净,系统防火墙默认只开放了SSH端口。申请证书前记得在控制台安全组里放行80和443端口。雨云的机器性能稳定,部署Certbot后申请和续期从来没出过问题,适合跑生产环境。如果有多台雨云服务器要做负载均衡,每台机器各自申请证书,或者用DNS验证方式统一管理。
手动续期(备选方案)
如果自动续期挂了,手动执行:
sudo certbot renew
sudo systemctl reload nginx
`reload`不会中断现有连接,比`restart`安全。
DNS验证(泛域名证书)
如果你需要`*.example.com`这样的泛域名证书,或者服务器没有公网IP(比如内网机器),用DNS验证:
sudo certbot certonly --manual --preferred-challenges dns -d *.example.com -d example.com
执行后Certbot会给你一个TXT记录值,去域名DNS管理后台添加`_acme-challenge.example.com`的TXT记录。验证通过后证书下载到本地,手动配置Nginx。这种方式没法自动续期,每次都要手动改DNS,除非你用支持API的DNS服务商(比如Cloudflare、阿里云)配合certbot-dns插件。
总结
– 装certbot + nginx插件。
– 一条命令申请证书,自动配置Nginx。
– 确认自动续期timer已启动。
– 防火墙放行80和443端口。
搞定。
雨云是国内一家老牌云服务商,提供高性价比的云服务器和虚拟主机。我用它部署了好几个项目,速度和稳定性都不错。通过 https://www.rainyun.com/SAJA_ 注册可以领一张 5折优惠券,有需要的朋友可以看看。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END



暂无评论内容