近日,在技术社区中,一个关于PKI基础设施架构的提问引发了广泛讨论:使用Smallstep的Step-CA,搭配6个中间CA、Badger或CloudNativePG(CNPG)作为后端存储,并通过透传模式(passthrough)的HAProxy进行流量代理——这样的组合是否真正适用于生产环境?这一架构涉及证书生命周期管理、高可用性和性能调优等多个关键维度,值得我们深入剖析。
架构拆解:层层递进的PKI设计
提问者所描述的方案核心包括三层:证书颁发层(Step-CA + 6个中间CA)、数据持久化层(Badger或CNPG)、以及网络接入层(HAProxy passthrough)。Step-CA是Smallstep开源的轻量级CA工具,支持自动化的证书签发和轮换。6个中间CA意味着每个中间CA可能服务于不同的子域、团队或用途,以此实现职责分离和权限收敛。后端存储方面,Badger是嵌入式键值数据库,以极低延迟和简单部署著称;CNPG则基于Kubernetes的PostgreSQL集群,提供更强的ACID事务能力和跨节点数据一致性。HAProxy采用透传模式,意味着TCP层面的四层代理,不解密TLS流量,从而将证书验证完全交由后端CA处理。
单从组件选择看,这套架构似乎兼顾了灵活性、隔离性和性能。然而,生产环境对稳定性、安全性和运维复杂度有着苛刻要求,几个细节值得警惕。
潜在风险:中间CA数量与存储选型的博弈
过度拆分中间CA带来的管理成本。 6个中间CA虽然能实现细粒度权限控制,但每个CA都需要独立维护密钥、证书链和CRL/OCSP响应器。如果缺乏统一的自动化编排平台,仅凭脚本管理6条CA链,极易出现证书过期失控、撤销信息不同步等问题。更关键的是,Step-CA虽然支持多CA配置,但同一实例下多个中间CA共享同一个数据库后端,这要求数据库必须具有高一致性和低延迟。若使用Badger,则面临单点故障和扩展瓶颈——Badger虽然快,但不支持跨节点复制,一旦节点宕机,整个PKI将陷入瘫痪。而CNPG提供了基于Patroni的自动故障转移和备份恢复能力,但需要额外的Kubernetes运维知识,且PostgreSQL在大量证书签发场景下的TPS表现可能不如专用键值存储。
透传HAProxy的双刃剑。 透传模式保留了端到端的TLS加密,但使得HAProxy无法进行第七层的健康检查和流量路由。对于CA服务而言,这意味着HAProxy无法感知后端Step-CA实例是否真正响应证书请求——它只能根据TCP端口存活状态做简单判断。当Step-CA因证书链验证或数据库连接池耗尽而“僵死”时,HAProxy可能仍会将流量分发至该节点,导致部分请求超时。如果引入应用层健康检查,则需要HAProxy解密流量(即SSL终结模式),但这又会打破“不接触私钥”的安全设计。
生产环境的正确打开方式
针对这一架构,业界多位基础设施工程师给出了建议:中间CA数量不宜超过3个,且应按照业务场景(如内部服务、外部客户端、代码签名)而非子域划分。存储层推荐使用CNPG(或等效的Raft/ETCD方案),因为Badger仅适合实验室或边缘节点。HAProxy方面,可考虑在透传基础上增加TCP健康检查脚本,例如通过定时连接Step-CA的API端口并尝试发送一个简单的证书签名请求,验证其是否正常响应。
更优的替代方案是:将Step-CA本身构建为无状态服务,后端使用独立的分布式证书数据库(如HashiCorp Vault的PKI secrets engine或Cert-Manager搭配AWS PCA),HAProxy则仅作为流量均衡器,不做任何证书层面的干预。
总结:理论上可行,实践中需谨慎权衡
Step-CA + 6中间CA + Badger/CNPG + HAProxy passthrough的架构,在概念验证环境中展现出令人心动的灵活性和性能。但生产部署需要额外投入自动化运维、监控告警和灾备演练。对于初创团队或中等规模业务,建议缩减中间CA数量,并优先选用CNPG确保数据一致性;对于大型企业,则推荐转向更成熟的商业PKI方案或托管服务。技术没有绝对的“正确”,只有与业务规模、团队能力相匹配的“适合”。