返回博客
用 Certbot 在腾讯云上配置免费SLL证书与自动续期

用 Certbot 在腾讯云上配置免费SLL证书与自动续期

在腾讯云 Linux 服务器上使用 Certbot 申请免费证书,让域名支持HTTPS

网站支持HTTPS,需要申请 SSL 证书,阿里云、腾讯云都提供收费和免费的 SSL 证书 申请,一般来说个人网站申请免费的证书就可以了,但是网站提供的证书只有90天有效期,过期需要重新申请和配置,对长期维护来说并不友好,使用 Let’s Encrypt 的 Certbot 工具也可以申请有效期 90天 的 SSL 免费证书,并且支持自动续期

Let’s EncryptCertbot

Let’s Encrypt 是一个免费的证书颁发机构(CA),由非营利组织 运营。它签发的证书被所有主流浏览器信任,有效期只有 90 天–这不是缺点,而是为了倒逼自动化:证书就该让机器去续期,不该靠人记着。

Certbot 是 Let’s Encrypt 官方推荐的客户端工具。你给它域名,它帮你完成验证、申请、部署、续期,全程自动化。

准备工作

安全组放行 80 和 443 端口。 登录腾讯云控制台 -> 云服务器 -> 安全组,入站规则加上 TCP 80 和 TCP 443。Certbot 验证域名时需要从外部访问你服务器的 80 端口,不通一定失败。

域名解析已生效。 域名 已经指向了你的服务器公网 IP,通过域名解析可以获取到你服务器公网IP

Nginx 正常运行。 通过 http://example.com 能正常打开页面。Certbot 需要读取 Nginx 配置来定位你的站点。

安装 Certbot

# CentOS / TencentOS / OpenCloudOS
yum install epel-release -y
yum install certbot python3-certbot-nginx -y

# Ubuntu / Debian
apt update
apt install certbot python3-certbot-nginx -y

python3-certbot-nginx 是 Nginx 插件,让 Certbot 能自动读取和修改 Nginx 配置。装完验证一下:

certbot --version

申请证书

一条命令搞定:

# -d example.com -d www.example.com -- 指定证书要覆盖的域名。-d 是 --domain 的缩写,多个 -d 意味着申请一张证书同时覆盖多个域名
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会读取 Nginx 配置,找到对应域名的 server 块,然后自动修改配置、添加 HTTPS。

第一次运行会问你几件事:

  • 邮箱 – 用于证书过期提醒,填一个你常用的
  • 同意条款 – 输入 A
  • 是否分享邮箱给 EFF – 随意,输 N
  • 是否将 HTTP 重定向到 HTTPS – 选 2(Redirect),让所有流量走 HTTPS

最后一步选完,Certbot 会自动改好 Nginx 配置并 reload。这时候访问 https://example.com,应该能看到地址栏的锁了。

自动续期

Certbot 安装时已经自动注册了一个 systemd timer,每天检查两次是否有证书快到期了(到期前 30 天触发续期)。你基本不用管它。

先确认 timer 在跑:

sudo systemctl list-timers | grep certbot

然后跑一次模拟续期,验证整个流程没问题:

sudo certbot renew --dry-run

--dry-run 会向 Let’s Encrypt 的测试环境发模拟请求,不消耗正式配额。看到 Congratulations, all simulated renewals succeeded 就行了。

续期成功后 Certbot 会自动 reload Nginx,新证书立即生效。不需要重启服务,不需要手动操作。

几个常见的坑

验证失败,提示 Connection refused。 去服务器控制台的防火墙那一栏检查入站规则,确认 TCP 80 是通的。

验证失败,提示 DNS problem。 域名解析还没生效,或者指向了错误的 IP。用 dig example.com @8.8.8.8 从公共 DNS 查一下,确认返回的是你服务器公网 IP。刚改完 DNS 记录的话,等几分钟再试。

频繁申请被限流。 Let’s Encrypt 限制同一组域名每周最多 5 张重复证书。调试时加 --staging 参数走测试环境,不消耗配额(测试环境签发的证书不受信任,但能验证流程):

sudo certbot --nginx -d example.com --staging

流程跑通后去掉 --staging 正式申请。