TLS 对客户端与 MongoDB 部署之间以及副本集中的节点之间的连接进行加密。在配置 TLS 之前,请使用此页面来确定符合安全要求的配置。
重要
这些步骤适用于自管理 MongoDB 部署。MongoDB Atlas 集群默认使用 TLS。如果使用 Cloud Manager 或 Ops Manager,请通过部署管理工具配置 TLS。
开始之前
在规划 TLS 配置之前,请确保您具备以下资源和信息:
要与 TLS 配置的自管理 MongoDB 副本集。
可用的证书授权类型,例如公共或私有 CA。
您的安全要求,例如是否需要 X.509 身份验证。
您可以访问的 CA 类型决定可用的 TLS 配置:
CA 类型 | 说明 | 推荐用途 |
|---|---|---|
Public CA |
| 无 mTLS 或 X.509 身份验证的集群内 TLS 加密 |
私有 CA |
| 集群内 mTLS 和 X.509 节点身份验证 |
自签名 |
| 仅限于本地开发和测试 |
选择您的配置
以下部分将帮助您决定如何配置副本集中节点之间以及客户端与服务器之间的 TLS 加密和身份验证。
在节点之间使用集群内 TLS 和密钥文件身份验证,在客户端和服务器之间使用相互 TLS 和 X.509 身份验证的示例部署。
节点之间的加密
所有启用 TLS 的部署都会对节点之间的连接进行加密。您还可以启用集群内 mTLS,这要求节点在 TLS 握手期间出示证书以客户端身份进行身份验证。当节点接受入站连接时,它会出示其服务器证书,以便连接方验证其身份。当节点向另一个节点建立出站连接时,其行为取决于您是否启用集群内 mTLS。
使用下表确定每种加密模式所需的内容:
加密模式 | 系统要求 |
|---|---|
不含 mTLS 的集群内 TLS |
|
集群内 mTLS |
|
在没有集群内 mTLS 的情况下,节点不会呈现证书以在出竞f连接上进行客户端身份验证。连接节点验证接收节点的服务器证书,但接收节点不会通过 TLS 握手验证连接节点的身份。如果您只能通过公共 CA 等方式获取具有 serverAuth EKU 的证书,请使用此配置。使用此配置无法在节点之间启用 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 服务器证书。