TLS 对客户端和MongoDB 部署之间以及副本集的节点之间的连接进行加密。在配置 TLS 之前,请使用此页面来决定符合您的安全要求的配置。
重要
这些步骤应用于自我管理的MongoDB部署。 MongoDB Atlas集群默认使用 TLS。如果您使用Cloud Manager或Ops Manager,请通过部署管理工具配置 TLS。
开始之前
在规划 TLS 配置之前,请确保您拥有以下资源和信息:
要使用 TLS 配置的自管理MongoDB副本集。
可用的证书颁发机构的类型,例如公共或私有 CA。
您的安全要求,例如是否需要 X.509 身份验证。
您有权访问权限的 CA 类型决定了您可以使用哪些 TLS 配置:
CA 类型 | 说明 | 推荐使用 |
|---|---|---|
公共 CA |
| 无需 mTLS 或 X.509身份验证的集群内 TLS加密 |
私有 CA |
| 集群内 mTLS 和 X.509节点身份验证 |
自签名 |
| 仅限本地开发和测试 |
选择您的配置
以下部分将帮助您决定如何在副本集的节点之间以及客户端与服务器之间配置 TLS加密和身份验证。
使用集群内 TLS 和节点之间的密钥文件身份验证以及客户端和服务器之间的双向 TLS 和 X.509身份验证的部署示例。
节点之间的加密
所有启用 TLS 的部署都会加密节点之间的连接。您还可以启用集群内 mTLS,这要求节点在 TLS 握手期间提供证书以作为客户端进行身份验证。当节点接受传入连接时,它会提供其服务器证书,以便连接方可以验证其身份。当一个节点与另一个节点建立出站连接时,其行为取决于是否启用集群内 mTLS。
使用下表确定每种加密模式的需求:
加密模式 | 系统要求 |
|---|---|
不含 mTLS 的集群内 TLS |
|
集群内 mTLS |
|
如果没有集群内 mTLS,节点在出站连接时不会提供证书以作为客户端进行身份验证。连接节点验证接收节点的服务器证书,但接收节点不通过 TLS 握手验证连接节点的身份。如果您只能通过serverAuth EKU 获取证书(例如通过公共 CA),请使用此配置。您无法在具有此配置的节点之间启用X.509 身份验证。
通过集群内 mTLS,每个节点还在与其他节点的出站连接时提供证书,从而提供相互身份验证。需要集群内 mTLS 才能使用 X.509节点身份验证。但是,由于它需要具有 clientAuth EKU 的证书,因此您必须有权访问权限私有 CA。
节点之间的身份验证
副本设立成员相互进行身份验证,以确认只有授权成员才能参与复制。默认下,启用授权的副本集在节点之间使用密钥文件身份验证。但是,如果启用集群内 mTLS,则可以改用 X.509 证书身份验证。
使用下表确定每种身份验证模式的需求:
身份验证模式 | 系统要求 |
|---|---|
密钥文件身份验证 |
|
X.509节点身份验证 |
|
如果使用密钥文件身份验证,则所有副本集成员股票存储在密钥文件中的单个密钥。每个节点通过在连接到设立中的其他节点时提供共享密钥来证明其成员资格。由于所有节点股票相同的密钥,因此如果要撤销单个节点的访问权限,则必须替换所有节点的密钥文件。
X.509身份验证使用每个节点的集群证书来验证成员资格。由于证书交换发生在 TLS 握手期间,因此 X.509节点身份验证需要集群内 mTLS,以便节点相互验证身份。每个节点都有唯一的证书标识,允许您通过撤销证书来撤销单个节点的访问权限,而不会影响其他节点。此外,身份验证和加密是在单次握手中同时建立的。
集群成员证书必须包含 X.509 属性,以区别于常规客户端证书。要学习;了解所需的证书属性,请参阅成员 X.509 证书。
客户端和服务器之间的加密
当mongosh 或驾驶员等客户端连接到启用 TLSmongod 的 实例时,服务器会提供其证书来证明其身份,而客户端会根据受信任的 CA 证书来验证该证书。客户端还会确认服务器的主机名与证书的主机名匹配。如果验证成功,TLS 将对服务器和客户端之间的连接进行加密。
使用下表确定每种加密模式的需求:
连接模式 | 系统要求 |
|---|---|
没有客户端证书的 TLS |
|
双向 TLS 或 X.509客户端身份验证 | 客户端必须提供包含 |
您可以将allowConnectionsWithoutCertificates true设立为 ,以启用客户端能够在不发送证书的情况下进行连接。启用此选项可防止用户使用不正确的证书进行连接,例如仅包含serverAuth EKU 的证书。服务器加密连接并向客户端证明自己的身份,但服务器无法通过 TLS 握手验证客户端的身份。客户端必须通过SCRAM等方法进行身份验证。
如果客户端在握手期间提供自己的证书,服务器可以根据受信任的 CA 验证客户端证书。这将在服务器和客户端之间建立双向 TLS。客户端必须提供证书才能启用客户端和服务器之间的 X.509客户端身份验证。
客户端和服务器之间的身份验证
建立 TLS 连接后,客户端必须进行身份验证才能访问权限部署。客户端可以通过多种方式进行身份验证,但本快速入门将介绍SCRAM和 X.509 身份验证。
使用下表确定每种身份验证模式的需求:
身份验证模式 | 系统要求 |
|---|---|
SCRAM 身份验证 |
|
X.509客户端身份验证 |
|
MongoDB使用SCRAM作为默认的客户端身份验证机制。客户端提供用户名、密码和身份验证数据库, MongoDB会根据指定数据库中的用户验证凭证。 SCRAM不要求客户端在 TLS 握手期间提供证书。
X.509客户端身份验证使用客户端在连接期间提供的证书。建立双向 TLS 后,客户端将使用 MONGODB-X509 机制向 $external数据库进行身份验证。 MongoDB将证书中的主题字段映射到 $external数据库中的用户。
后续步骤
使用此页面确定配置后,继续获取 TLS 服务器证书。