在 Hetzner 服务器上申请免费 HTTPS 证书,最推荐直接使用 Certbot 客户端配合 Let's Encrypt 证书。适用场景为拥有独立域名且服务器 80 端口对外开放的 Linux 实例,风险边界在于防火墙配置错误会导致验证失败。
先说结论:Certbot 是 Let's Encrypt 官方推荐的自动化客户端,适用于 Hetzner Cloud 和 Root Server 等标准 Linux 环境。
- 适合:需要为 Nginx、Apache 或 standalone 服务部署 HTTPS 的站长。
- 先准备:确保域名 A 记录已解析到 Hetzner 服务器公网 IP,且 80 端口未被防火墙拦截。
- 验收:浏览器地址栏显示锁形图标,且证书有效期为 90 天。
命令速用版
以下命令适用于 Ubuntu/Debian 系统,其他发行版请调整包管理器。
安装 Certbot 及插件:
sudo apt update
sudo apt install certbot python3-certbot-nginx自动获取并配置 Nginx 证书:
sudo certbot `--nginx` -d 你的域名.com -d www.你的域名.com测试自动续期:
sudo certbot renew `--dry-run`为什么会这样
Certbot 通过 ACME 协议与证书颁发机构通信,自动完成域名所有权验证。Let's Encrypt 签发的证书有效期固定为 90 天,目的是缩短密钥泄露后的风险窗口,因此必须配置自动续期。Hetzner 服务器本身不提供托管式 SSL 服务,用户需在操作系统层面自行管理证书文件。
分步处理
第一步:检查域名解析
在本地终端使用 ping 命令确认域名已指向 Hetzner 服务器 IP。
ping 你的域名.com若 IP 不一致,需前往域名服务商控制台修改 A 记录。
第二步:放行 80 端口
Hetzner Cloud 控制台默认可能开启云防火墙,需在 Hetzner Cloud Panel 的 Firewall 设置中允许 inbound TCP 80 端口。服务器内部若启用 ufw,也需执行 sudo ufw allow 80/tcp。
第三步:运行 Certbot
根据 Web 服务器类型选择插件。Nginx 使用 `--nginx`,Apache 使用 `--apache`。若无 Web 服务器或需独立运行,使用 certbot certonly `--standalone`,此时需确保 80 端口未被其他程序占用。
第四步:配置自动续期
Certbot 安装后会自动创建 systemd timer 或 cron 任务。可通过 sudo systemctl list-timers 查看 certbot-renew 任务是否处于 active 状态。
怎么验证是否生效
命令行验证:
使用 curl 命令检查响应头是否包含 SSL 信息。
curl -I https://你的域名.com若返回 HTTP/2 或 HTTP/1.1 200 OK 且无证书报错,则配置成功。
证书信息查看:
执行 sudo certbot certificates 可查看当前已颁发证书的域名、有效期和路径。
浏览器验证:
访问 HTTPS 链接,点击地址栏锁形图标,确认颁发者为 ISRG Root X1 或 R3,且有效期剩余天数大于 60 天。
常见坑
防火墙拦截验证请求:Let's Encrypt 验证服务器从外网访问你的 80 端口,若 Hetzner 云防火墙或服务器内部 iptables 拦截,验证会超时失败。
达到速率限制:Let's Encrypt 对同一域名每周有颁发次数限制。若多次失败,建议先使用 `--staging` 参数测试流程,确认无误后再正式申请。
Web 服务器配置冲突:使用 `--nginx` 插件时,Certbot 会修改 Nginx 配置文件。若手动修改过复杂配置,建议先备份 /etc/nginx/ 目录。
常见问题
证书到期后会自动续期吗?
默认会自动续期,但需确保定时任务正常运行。Certbot 安装后会自动配置系统定时任务,建议每月检查一次 certbot renew `--dry-run` 日志。
Hetzner 服务器 IP 变更会影响证书吗?
不会影响证书文件本身,但需及时更新域名 DNS 解析。若 IP 变更后域名未指向新 IP,续期验证会因无法访问服务器而失败。
可以申请通配符证书吗?
可以,但需使用 DNS-01 验证方式。需添加 `--manual` 或配合 DNS 插件,并在域名服务商处添加特定的 TXT 记录,操作复杂度高于 HTTP-01 验证。
参考来源
- Certbot 官方文档:Instructions for Ubuntu 22.04 LTS (nginx), https://certbot.eff.org/instructions
- Let's Encrypt 官方文档:Rate Limits, https://letsencrypt.org/docs/rate-limits/
- Let's Encrypt 官方文档:Validation Methods, https://letsencrypt.org/docs/challenge-types/