大型系统中的证书管理

举报
张俭 发表于 2023/12/11 10:33:16 2023/12/11
【摘要】 大型系统中的证书管理随着安全的要求,现在我们在越来越多的通信中使用TLS加密。下图是一个微服务架构下数据流向的例子蓝色部分,即和三方交互时需要TLS加密认证红色部分,各个微服务、消息中间件等通信需要TLS加密认证绿色部分,各个微服务和存储层通信也需要TLS加密认证安全上对我们的要求逐步变化为,仅蓝色使用TLS=》蓝色和红色使用TLS=》全部使用TLS加密 证书管理的必要性从安全的角度上来说...

大型系统中的证书管理

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

cert-manager1.png

  • 蓝色部分,即和三方交互时需要TLS加密认证
  • 红色部分,各个微服务、消息中间件等通信需要TLS加密认证
  • 绿色部分,各个微服务和存储层通信也需要TLS加密认证

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

证书管理的必要性

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

  • 可以通过抽象出场景,通过场景和证书的关联联系,在各个地方通信使用的证书,可以统一更换。
  • 统一提供证书过期告警等功能
  • 统一提供证书的变更通知,通知到各个实例

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

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

证书管理概念

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

加密证书

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

验证证书

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

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

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

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

cert-manager2.png

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

Scene

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

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

多集群管理

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

对小型系统的建议

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

证书管理的功能

cert-manager3.png

证书管理场景

设定一个TLS会话

cert-manager4.png

使用TLS会话

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

cert-manager5.png

组织架构相关

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

TLDR

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。