免费 SSL 证书与 HTTPS:Let's Encrypt 申请与自动续期
用 certbot 在几分钟内为你的网站签发免费 SSL 证书,并配置自动续期与强制 HTTPS。
HTTPS 已经是网站的标配:它加密浏览器与服务器之间的流量,防止窃听和篡改,浏览器也不会再对你的站点显示「不安全」警告。过去证书要花钱购买,如今 Let's Encrypt 提供免费、自动化的证书,配合官方工具 certbot,几条命令就能搞定申请、安装和续期。本文以 Nginx 为例演示完整流程。
准备工作
开始之前,请确认:
- 你有一台可以 SSH 登录的服务器(VPS 或独立主机),并拥有 root 或 sudo 权限。
- 域名的 A/AAAA 记录已经解析到服务器公网 IP。
- 服务器的 80 和 443 端口对外放行(防火墙、安全组均需放行)。
- 网站已通过 Nginx 正常提供 HTTP 服务。
Let's Encrypt 会通过访问 http://你的域名/.well-known/ 来验证域名归属,所以域名必须真实指向这台服务器。
安装 certbot
推荐使用 snap 安装,版本较新且自带续期机制。
Ubuntu / Debian:
sudo apt update
sudo apt install -y snapd
sudo snap install --classic certbot
sudo ln -sf /snap/bin/certbot /usr/bin/certbot
CentOS / Rocky:
sudo dnf install -y epel-release
sudo dnf install -y certbot python3-certbot-nginx
若不想用 snap,Ubuntu/Debian 也可以直接 sudo apt install -y certbot python3-certbot-nginx。
一键签发并配置证书
最省事的方式是让 certbot 自动修改 Nginx 配置:
sudo certbot --nginx -d example.com -d www.example.com
首次运行会要求填写邮箱(用于续期提醒)并同意服务条款。certbot 会自动完成域名验证、下载证书,并在对应的 Nginx server 块里写入 sslcertificate 等配置。
过程中它会询问是否把 HTTP 请求重定向到 HTTPS,选择 Redirect 即可自动开启强制跳转。完成后访问 https://example.com,浏览器应显示有效的锁形图标。
证书文件默认保存在 /etc/letsencrypt/live/example.com/ 下,fullchain.pem 是证书链,privkey.pem 是私钥。
手动强制 HTTPS 跳转
如果你想自己控制跳转,可在 Nginx 的 80 端口 server 块中加入:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
改完执行 sudo nginx -t && sudo systemctl reload nginx 使配置生效。
自动续期
Let's Encrypt 证书有效期仅 90 天,必须定期续期。好在 certbot 已经帮你装好了定时任务。
先用「演练」模式测试续期是否正常(不会真正续期):
sudo certbot renew --dry-run
看到 Congratulations 即说明配置无误。真实续期只需:
sudo certbot renew
它只会续期临近到期(30 天内)的证书,并自动 reload Nginx。
续期任务由 systemd timer 驱动,可以确认它已启用:
systemctl list-timers | grep certbot
systemctl status snap.certbot.renew.timer
apt 安装版对应的是 certbot.timer。有了它,你无需再手动操作,证书会在到期前自动更新。
通配符证书(简述)
如果需要覆盖 .example.com 这类通配符证书,HTTP 验证就不够了,必须用 DNS 验证——即在域名解析里添加一条 certbot 指定的 TXT 记录来证明你控制该域名:
sudo certbot certonly --manual --preferred-challenges dns \
-d example.com -d '*.example.com'
certbot 会给出一个 TXT 记录值,你到 DNS 服务商后台添加、等待生效后回车继续。若你的 DNS 服务商有对应插件(如 Cloudflare),还能实现全自动签发与续期,免去手动加记录。
小结
用 Let's Encrypt + certbot,免费 HTTPS 只需三步:安装 certbot、certbot --nginx 一键签发并开启跳转、依赖 systemd timer 自动续期。记住证书 90 天到期,先用 --dry-run 验证续期链路,再把强制跳转配好,你的网站就能长期稳定地跑在 HTTPS 上。通配符证书改用 DNS 验证即可。