ACME(自动化证书管理环境)客户端分为两类:浏览器端(如 GetHTTPS)和命令行端(如 Certbot 和 acme.sh)。两者都与相同的 Let’s Encrypt API 通信,签发完全相同的证书。区别在于工作在哪里执行,以及谁控制密钥。
对比
| 浏览器端 (GetHTTPS) | 命令行端 (Certbot, acme.sh) | |
|---|---|---|
| 运行位置 | 浏览器标签页 | 服务器命令行 |
| 安装 | 无需安装 | 需要安装(snap、pip、shell 脚本) |
| 密钥生成 | 浏览器(Web Crypto API) | 服务器(OpenSSL) |
| 密钥存储 | 由你下载保存 | 服务器文件系统 |
| 自动续签 | ❌ 手动 | ✅ Cron/systemd |
| 需要服务器访问权限 | 否 | 是 |
| 图形界面 | ✅ | ❌ |
| 提交前预检 | ✅ (GetHTTPS) | ❌ |
| 可脚本化 | ❌ | ✅ |
| 依赖 | 现代浏览器 | OpenSSL、curl、cron |
浏览器端的优势场景
- 没有服务器访问权限 — 虚拟主机、托管平台,或者无法安装软件的服务器
- 最高级别的密钥隐私 — 私钥仅存在于浏览器内存中,直到你下载为止
- 非技术用户 — 网页界面比终端更容易上手
- 一次性证书 — 比为单个证书配置命令行工具更快
- 协助他人 — 共享浏览器操作画面比口述命令行命令更简单
命令行端的优势场景
- 自动续签 — 对生产服务器至关重要,尤其是即将实行 47 天有效期的情况下
- 规模化基础设施 — 可脚本化、可容器化,可通过配置管理工具控制
- DNS API 自动化 — acme.sh 等命令行工具支持 150+ DNS 服务商插件
- CI/CD 集成 — 将证书签发纳入部署流水线
- 服务器自动配置 — Certbot 的 Nginx/Apache 插件可直接配置 Web 服务器
混合方案
许多团队同时使用两者:
- GetHTTPS 获取首张证书(零配置时间)
- 之后安装 Certbot 或 acme.sh 进行持续自动续签
这种方式让你无需前期投入即可立即运行 HTTPS,等准备好了再添加自动化。
浏览器端 ACME 客户端
浏览器端 ACME 客户端是相对较新的类别。选项包括:
| 客户端 | 开源 | 密钥生成 | 直连 ACME | 预检 |
|---|---|---|---|---|
| GetHTTPS | 否 | 浏览器(Web Crypto) | 是 | 是 |
| SSL For Free | 否 | ⚠️ 服务器端 | 通过 ZeroSSL | 否 |
| ZeroSSL Dashboard | 否 | ⚠️ 可能是服务器端 | 通过 ZeroSSL API | 否 |
GetHTTPS 是唯一使用 Web Crypto API 在本地生成密钥并直接连接 Let’s Encrypt ACME API(无任何中间件)的浏览器端客户端。
命令行 ACME 客户端
命令行生态系统更加成熟:
| 客户端 | 语言 | 需要 Root | 自动续签 | DNS 插件 | 服务器配置 |
|---|---|---|---|---|---|
| Certbot | Python | 是(snap/pip) | 是(systemd) | 通过插件 | Nginx/Apache 自动配置 |
| acme.sh | Shell | 否 | 是(cron) | 150+ 内置 | 手动 |
| Lego | Go | 否 | 是 | 100+ | 手动 |
| Caddy | Go | N/A(内置) | 是(自动) | 通过 DNS 模块 | 内置于 Caddy 服务器 |
| dehydrated | Shell | 否 | 是(cron) | 通过钩子 | 手动 |
详细对比:GetHTTPS vs Certbot → | GetHTTPS vs acme.sh →
未来:47 天证书
随着证书有效期在 2029 年降至 47 天,天平进一步向命令行客户端(生产环境)倾斜。每 30-35 天手动续签(浏览器端)虽然可行但很繁琐。
然而,浏览器端客户端不会消失。它们持续服务于以下场景:
- 无法使用命令行的环境 — 虚拟主机、托管平台、限制性的企业环境
- 首次配置 — 5 分钟内让 HTTPS 生效,然后再决定是否安装命令行工具
- 紧急续签 — 服务器上的 Certbot 坏了,你现在就需要证书
- 为他人生成证书 — 为客户或同事生成证书而无需访问他们的服务器
- 隐私敏感场景 — 私钥不应存在于任何服务器上,即使是临时的
常见问题
浏览器端客户端安全性较低吗?
并非如此。GetHTTPS 使用 Web Crypto API 生成密钥(与 TLS 本身使用的是相同的加密原语),并通过 HTTPS 直接与 Let’s Encrypt 通信。密钥从不接触任何第三方服务器。主要的权衡是缺乏自动续签能力,而非安全性。
47 天证书会让浏览器端客户端过时吗?
不会过时,但作为唯一的续签方式会变得不太方便。它们在初始配置、紧急续签和无服务器访问场景中仍有价值。但对于每 30-40 天需要续签的生产负载,命令行自动化是更务实的长期选择。
应该选择哪个命令行客户端?
Certbot — 如果你需要 Nginx/Apache 自动配置且不介意 Root 权限。acme.sh — 如果你需要无 Root 运行、DNS API 插件和轻量级方案。Caddy — 如果你正在更换 Web 服务器,它可以零配置自动处理 HTTPS。
浏览器端客户端能用于自动化流水线吗?
不能直接使用 — 浏览器端客户端需要人工交互。对于 CI/CD 流水线或基础设施即代码方案,请使用命令行客户端。GetHTTPS 专为人工操作流程设计;Certbot 和 acme.sh 专为机器操作流程设计。