ReactorCA:给 Homelab 配 TLS 证书,终于可以不用自签警告了
评测 ReactorCA,一个用 Go 写的轻量级证书颁发机构工具,支持 age 加密私钥和自动化部署,专为 Homelab 和小型办公环境设计。
[广告位: article-top] 请在 .env 中配置至少一个广告平台
说实话,我在家里搭了一堆服务——NAS、Proxmox、Home Assistant、各种 Docker 容器——每次用浏览器访问的时候,那个红色的”您的连接不是私密连接”警告都让我血压飙升。我知道可以点”高级”然后继续,但每次都要来这么一下,真的很烦。
用 Let’s Encrypt?内网域名又不支持。买商业证书?一个 homelab 而已,不至于。所以我一直想要一个”属于自己的小 CA”,能给内网设备签发证书,浏览器还不报警告。
最近刷 GitHub 发现了 ReactorCA,一个用 Go 写的 CLI 工具,专门解决这个问题。目前 124 stars,虽然小众,但功能挺对味的。
这项目到底想解决啥问题
ReactorCA 的定位很清晰:给 homelab 和小型办公环境提供一个轻量级的证书颁发机构(CA)。它的核心思路是”反转控制”——不像传统 CA 那样等别人提交 CSR,而是所有私钥都由 CA 集中管理,一键签发、一键续期、一键部署。
作者提到的一个背景挺有意思:苹果已经把证书有效期限制到一年了,整个行业正在往 47 天有效期走(预计 2029 年)。这意味着手动管理证书会越来越痛苦,自动化是必须的。
核心功能拆解
1. 自签 CA 的创建和管理
最基础的功能,创建一个自签名的根 CA。这个 CA 的证书导入到系统或浏览器信任库之后,由它签发的所有证书都会被信任。
ca init # 初始化配置文件,自动检测 SSH 密钥
ca ca create # 创建自签 CA(密码加密保护)
配置在 config/ca.yaml 里,可以指定有效期(默认 10 年)、密钥算法(RSA2048-4096、EC P256-521、ED25519)、哈希算法(SHA256/384/512)。
2. 主机证书的签发和续期
给具体的主机签发证书,支持各种 SAN(Subject Alternative Name):DNS 名、IP 地址、邮箱、URI。
ca host issue my-nas # 给 my-nas 签发证书
ca host list # 查看所有证书和过期时间
ca host issue my-nas --deploy # 签发并直接部署
配置在 config/hosts.yaml 里,每台主机可以单独设置有效期、加密方式、导出路径。变量替换支持 ${cert}、${chain}、${key_encrypted}、${private_key},方便写部署脚本。
3. 多种加密方式保护私钥
这是我觉得最用心的地方。私钥用 age 的 ChaCha20-Poly1305 加密,支持三种解锁方式:
- 密码:scrypt 密钥派生,最通用
- SSH 密钥:支持 Ed25519、RSA、ECDSA,如果你已经有 SSH key 就很方便
- 硬件令牌:YubiKey、Apple Secure Enclave、TPM,通过 age 插件支持
我自己用的是密码方式,但 YubiKey 支持确实让我眼前一亮——这种安全级别在 homelab 工具里不多见。
4. 自动化部署
签发完证书之后,可以通过 shell 脚本部署到目标设备。作者给了几个例子:FritzBox、Proxmox PVE、NixOS。
# config/hosts.yaml 示例
my-nas:
sans:
dns: [nas.local, nas.lan]
ip: [192.168.1.10]
validity: 365d
export:
cert: /tmp/nas.crt
key: /tmp/nas.key
deploy:
- scp ${cert} ${key} root@nas:/etc/nginx/ssl/
- ssh root@nas "systemctl restart nginx"
5. 证书库存和过期追踪
ca host list 可以查看所有证书的状态和过期时间。虽然没有自动续期守护进程,但至少能一眼看出哪些快过期了。
存储结构也很清爽:
store/
├── ca/ca.crt, ca.key.age
├── hosts/<id>/cert.crt, cert.key.age
└── ca.log
实际使用场景
我自己试了一下,最顺手的场景有几个:
内网服务统一证书管理:NAS、路由器管理界面、Proxmox、Home Assistant,全部用同一个 CA 签发,导入一次根证书,后面全部绿灯。
VPN 内网证书:WireGuard 或 Tailscale 组网之后,内部域名也需要证书,ReactorCA 可以统一管理。
Git 驱动的证书基础设施:所有配置都是 YAML,store 目录可以进 git,证书变更走 PR 流程,团队协作很清晰。
快速上手
安装很简单,下载预编译二进制或者自己编译:
go build -o ca ./cmd/ca
然后四步走:
ca init
ca ca create
ca host issue <host-id>
ca host deploy <host-id>
整个流程下来不到五分钟,比我想象的顺畅。
优点和缺点(缺点必须说)
优点:
- 单二进制,零运行时依赖,Go 程序的老传统了
- age 加密私钥,比明文存 PEM 文件安全太多
- 支持硬件令牌,YubiKey 用户狂喜
- 配置即代码,Git 友好
- 部署脚本灵活,变量替换够用
缺点:
- 没有中间 CA 支持:只能有一个根 CA,不能搞分级架构。如果你的 homelab 很复杂,想按区域或用途拆分 CA,做不到。
- 没有 CRL/OCSP:证书吊销基本靠手动删除,没有标准的吊销列表机制。万一私钥泄露,只能祈祷没人在用。
- 没有 PKCS#12 导出:有些设备(比如旧版 Windows IIS)只认 p12 格式,你得自己用 openssl 转。
- 没有自动续期守护进程:虽然作者说”一键续期”,但还是要手动跑命令或者自己配 cron。对于”47 天有效期”这个背景来说,没有自动续期确实是个硬伤。
- ED25519 兼容性存疑:作者自己标注了”2025 年不推荐用于通用公网场景”,虽然 homelab 内网无所谓,但如果你打算把证书用到更广泛的场景,RSA2048+SHA256 才是最稳的。
- 124 stars 的小众项目:社区很小,遇到问题基本只能看源码或者提 issue,别指望 Stack Overflow 有答案。
和竞品对比
| 工具 | 特点 | 适用场景 |
|---|---|---|
| ReactorCA | 轻量 CLI,age 加密,Git 友好 | Homelab / 小型办公,追求简洁 |
| Let’s Encrypt | 免费公网证书,自动续期 | 有公网域名和 80/443 端口 |
| step-ca | 功能完整,支持中间 CA、ACME 协议 | 企业级或小团队,需要完整 PKI |
| XCA | GUI 界面,可视化操作 | 不喜欢命令行的用户 |
| certstrap | 极简,Netflix 出品 | 快速创建开发和测试证书 |
| EasyRSA | OpenVPN 配套工具 | 主要给 VPN 配证书 |
Let’s Encrypt 是免费神器,但内网域名用不了。step-ca 功能强大得多,支持 ACME 协议和中间 CA,但部署和配置也更复杂,对于只想给 homelab 搞个证书的人来说有点重。ReactorCA 正好卡在中间——比 certstrap 功能多,比 step-ca 轻量。
适合谁用
如果你符合以下画像,ReactorCA 值得一试:
- 家里有一堆内网服务,受够了浏览器的安全警告
- 想要一个能进 Git 的证书管理方案
- 对私钥安全有要求,不想明文存 PEM
- 有 YubiKey 之类的硬件令牌,想物尽其用
- 不想为了几个证书部署一整套 step-ca
但如果你需要企业级的 PKI 功能——中间 CA、自动续期、吊销列表、多租户——那还是去看 step-ca 或者商业方案吧。
总结
ReactorCA 是一个”刚刚好”的工具。它不会帮你解决所有证书问题,但对于 homelab 和小型办公环境来说,功能覆盖得挺到位。age 加密私钥是个亮点,Git 驱动的配置方式也很对开发者的胃口。
当然,124 stars 的项目,别指望它像 Let’s Encrypt 那样成熟稳定。我用下来的感觉是:个人 homelab 完全够用,小团队也能撑一段时间,但生产环境还是谨慎点好。
推荐指数:⭐⭐⭐⭐(扣一星给缺少自动续期和 CRL)
[广告位: article-bottom] 请在 .env 中配置至少一个广告平台