开发工具
English

ReactorCA:给 Homelab 配 TLS 证书,终于可以不用自签警告了

评测 ReactorCA,一个用 Go 写的轻量级证书颁发机构工具,支持 age 加密私钥和自动化部署,专为 Homelab 和小型办公环境设计。

gocertificatetlshomelab

[广告位: 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
XCAGUI 界面,可视化操作不喜欢命令行的用户
certstrap极简,Netflix 出品快速创建开发和测试证书
EasyRSAOpenVPN 配套工具主要给 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 中配置至少一个广告平台

相关文章