【发布时间】:2018-10-28 07:00:43
【问题描述】:
有人可以对我正在考虑的微服务安全设计中的微服务安全设计发表评论、审查、批评或其他漏洞吗?
假设我有三个微服务,每个微服务都通过 REST 端点与另外两个通信。每个微服务都包含一个密钥库。在此密钥库中是包含微服务的私钥/公钥对,由受信任的证书颁发机构签名。此密钥库中还有另外两个微服务的公钥证书,从源微服务的签名/可信密钥对导出。
这个实现是可行的,但它的味道不太对劲。
也就是说,每次我引入一个新的微服务时,我必须将 a) 每个现有微服务的公钥证书添加到其密钥库中,以及 b) 新微服务的公钥证书到每个其他微服务(假设新微服务必须与- 定向且安全地使用每个现有的微服务)。
现在,对第二个密钥对重复上述模式,这个密钥对用于签署/验证 REST 调用中提供的身份验证令牌。
我想知道,在所有微服务之间共享单个受信任的公钥证书是否 a) 可取和 b) 安全?完全不同的东西?
请保持礼貌。我绝不是这方面的专家。
编辑: 在阅读了对我原始帖子的回复/cmets 后,我突然想到,我省略了可能使问题更清楚的细节,因此评论者能够更好地解决它:
相关微服务存在于私有 Intranet 中,并且只能由该 Intranet 中的客户端(浏览器或其他微服务)访问。
实际上存在一个受信任的 CA(即拥有该 Intranet 的公司),并且正是该 CA 签署了微服务的密钥对。
@Andreas 的第一条评论似乎暗示了这个问题的解决方案,他在其中写道:“只要发布它们的 CA 是可信的,它们也将是可信的。”
只要每个新微服务都部署了 a) 自己的密钥对,由 CA 签名(一个用于签名,另一个用于加密),以及 b) CA 的证书,我就可以合理地保证它们会部署新的微服务与所有其他微服务安全通信(由于我什至不知道的其他潜在漏洞,这是合理的)。
不知何故,我想到我必须为每个微服务的密钥对创建一个全新的证书,并将这些证书包含在其他微服务的密钥库中(对每个新的微服务重复)。相反,我只需要一个证书,即签署密钥对的 CA 的证书,在每个微服务的密钥库中。
【问题讨论】:
-
为什么需要添加每个服务的公共证书?只要颁发它们的 CA 是可信的,它们也将是可信的。这就是网络本身的运作方式,那为什么不适合你呢?
-
感谢您使用了TLS,而不是大家误用的其他东西,但请将其从标签中删除。以及 java 和 tls1.2,因为您的问题并非特定于这些情况。
-
@Andreas 在您需要对客户端进行身份验证时效果不佳(对于服务器的身份验证很容易)。服务器需要事先对证书有所了解,或者使用私有 PKI,否则任何人都可以出示任何 CA 签署的任何证书。
-
如果可以,请依靠基础架构来提供安全通信。例如,如果您使用 Docker Swarm,您可以为网络激活连接加密:docs.docker.com/network/overlay/…
-
@ConstantinGalbenu 加密不是相互认证
标签: ssl microservices pki