0

这可能是一个非常愚蠢的问题,但我很难理解这到底是如何工作的。

我正在使用 MongoDB。我有 3 个文件:server.pem、client.pem 和 ca.pem。我需要使用它们在内部验证副本集的成员。

他们三个都是相似的。第一个问题是:为什么我需要三个?每个人的目的是什么?

我还有一个作业,我必须说这三个中的每一个是否都必须包含证书和密钥才能工作。我不想直接回答这个问题,但我想知道这是否与 x.509 标准或 MongoDB 本身有关,以及在哪里寻找答案。

我一直在这里和谷歌(主要是维基百科)上记录,但我没有在任何地方找到这个主题。

任何帮助表示赞赏。

谢谢

4

1 回答 1

2

关于使用 x.509 证书进行成员身份验证的 MongoDB 教程是一个很好的要求指南,但这里有一个指南,它在您获得的证书的上下文中进行了解释。

您需要的证书是:

  1. 您的证书颁发机构 (CA)的证书(不包括私钥)
  2. 对于副本集中的每个节点,一个私钥
  3. 对于副本集中的每个节点,一个证书:
    • 基于该私钥
    • 由同一个 CA 颁发
    • 按名称标识服务器

请注意,在节点运行在不同服务器上的普通副本集中,每个节点都需要自己的证书。在您的分配中,您获得了一个服务器证书,供每个节点使用;仅当每个节点都在同一台服务器上运行时才有效。

出于以下原因,需要该特定组件集:

  1. CA 的私钥应该只有CA 自己知道。
  2. 当节点A与节点B建立通信时,需要验证节点B的身份;它通过节点 B 向节点 A 显示其证书(不包括私钥)来执行此操作。
  3. 节点 A 使用 CA 的证书来验证节点 B 的证书(以及身份)
  4. 同样,节点 B 使用 CA 的证书来验证节点 A 的证书(从而验证身份)
  5. 对于节点 A 和 B 之间的加密通信,节点 A 必须使用自己的私钥对其传出消息进行加密;保存它最方便的地方是它的证书旁边,在pem 文件中。此私钥不与任何其他代理共享。
  6. 同样,节点 B 的 pem 文件包含节点 B 的私钥,仅供节点 B 自己使用。

所以总而言之,每个节点需要有:

  1. CA 的证书
  2. 节点自己的私钥
  3. 节点自己的证书

这些映射到您提供的文件如下:

  • ca.pem拥有 CA 的证书,仅此而已。
  • 为方便起见, server.pem包含节点的证书和私钥。
  • client.pem根本不需要;当客户端想要连接到正在运行的副本集时,大概会在以后使用它。
于 2017-05-16T19:51:29.387 回答