写点什么

大型系统中的证书管理

用户头像
张俭
关注
发布于: 2021 年 05 月 30 日

大型系统中的证书管理

随着安全的要求,现在我们在越来越多的通信中使用 TLS 加密。下图是一个微服务架构下数据流向的例子



  • 蓝色部分,即和三方交互时需要 TLS 加密认证

  • 红色部分,各个微服务、消息中间件等通信需要 TLS 加密认证

  • 绿色部分,各个微服务和存储层通信也需要 TLS 加密认证

安全上对我们的要求逐步变化为,仅蓝色使用 TLS=》蓝色和红色使用 TLS=》全部使用 TLS 加密

证书管理的必要性

从安全的角度上来说,我们最好能支持证书的更换和热加载。如果您的业务当前使用加密的场景不多,可能暂时看不到证书管理的意义。但是当你在各个方面使用 TLS 更加频繁之后,会发现证书管理可带来如下好处:

  • 可以通过抽象出场景,通过场景和证书的关联联系,在各个地方通信使用的证书,可以统一更换。

  • 统一提供证书过期告警等功能

  • 统一提供证书的变更通知,通知到各个实例

以我在工作中接触到的两个基础 PAAS 平台,都有证书管理的功能,可见证书管理的必要性。

PS: 开源组件大多都拥有证书配置能力,没有可对接证书管理的能力,但这个能力很难贡献给社区,需要自己开发。

证书管理概念

在 TLS 会话中,从依赖的证书文件角度来看,可以分为加密流程和验证流程。

加密证书

TLS 加密流程的证书,包含证书链文件和密钥

验证证书

TLS 验证流程的证书,仅包含证书链文件

拆分为加密流程和验证流程的合理性

这使得加密流程证书和验证流程证书可以互相独立的替换,更方便在大型场景下复用证书。

让我们来假设如下的场景:



客户 A、客户 B、客户 C、客户 D 的验证流程证书自然不相同,但服务跟客户交互的时候,使用的加密流程证书确实同一份。如果将两个阶段的证书合一,那么在更换证书的时候,就需要更新 4 份数据,当你有 1000 名用户的时候,这个数字将会是 1000,这对于存储和应用程序来说都是不小的冲击。

Scene

Scene 是在一个会话中,代表会话和请求证书、验证证书的绑定关系。Scene 和请求证书、验证证书都是 1:1 的关系。这使得我们不仅仅可以修改证书文件,也可以对 TLS 会话中使用的证书进行修改。在证书无法复用,且证书绑定了多个场景的时候,针对单个场景修改其绑定的证书。

以上图作为例子,假设客户 D 有特殊的要求,要求加密流程使用特定的证书或密钥,我们就可以将客户 D 的场景绑定到客户 D 独有的加密证书

多集群管理

如果证书管理需要管理多个集群,那么证书和 Scene 前面可以加上层级来隔离,如环境、集群等。

对小型系统的建议

如果规模不大,且 TLS 场景有限,需要考虑一下有无拆分加密证书和验证证书的必要,可以合一,应用程序直接以合一的证书 id 来关联,而非场景 id。虽不方便复用,但大大降低了复杂性。

证书管理的功能



证书管理场景

设定一个 TLS 会话



使用 TLS 会话

这要求应用程序持久化场景信息



组织架构相关

大型系统下,证书管理是一个必须的组件,且一定是由团队最底层的组织架构承接。如若不然,那么由底层组织架构维护的组件,因为依赖关系,无法基于证书管理来统一实现证书的更换和过期告警。除非不基于证书管理自己构筑一套能力。

TLTR

随着组件和使用加密场景的不断扩大,证书管理是一个必须的组件,通过抽象出场景的概念来复用证书,通过变更通知在微服务模式下快速更换所有微服务实例上的证书,并提供统一的证书过期告警功能来提醒管理员更换证书。

发布于: 2021 年 05 月 30 日阅读数: 62
用户头像

张俭

关注

还未添加个人签名 2018.08.02 加入

还未添加个人简介

评论

发布
暂无评论
大型系统中的证书管理