对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

在自管理部署上配置 TLS

This tutorial shows you how to configure TLS on a self-managed replica set. Select an approach based on whether you want to use intra-cluster mTLS, which is required to enable X.509 authentication between nodes.

重要

These steps apply to self-managed MongoDB deployments. MongoDB Atlas clusters use TLS by default. If you use Cloud Manager or Ops Manager, configure TLS through your deployment management tool.

开始之前,请确认您具有以下内容:

  • 自管理副本集,其中每个节点都有一个主机名,例如 localhostmongo0.example.com。TLS 尚未在副本集中的任何节点上配置。

  • 您遵循获取服务器证书教程获取的每个节点的 TLS 服务器证书,例如 mongo0.pem

  • 用于签名服务器证书的 CA 证书,例如 ca.pem

  • 访问每个节点上的 mongod 配置文件。

  • Access to mongosh.

如果您不需要服务器节点之间的集群内 mTLS 或 X.509 身份验证,请遵循此程序。

1

每个节点都使用密钥文件的内容来验证部署的其他节点。使用以下命令创建密钥文件:

openssl rand -base64 756 > /etc/ssl/mongodb/keyfile
chmod 400 /etc/ssl/mongodb/keyfile

将密钥文件复制到部署中的每个节点。确保对密钥文件限制权限,以便只有 mongod 进程才能读取该文件。

2

每个节点上,找到并打开 mongod 配置文件。如果该文件不存在,则创建它。添加以下 TLS 选项。使用证书文件的绝对路径。

示例,主节点 (primary node in the replica set)的配置文件如下所示:

net:
tls:
mode: allowTLS
certificateKeyFile: /etc/ssl/mongodb/mongo0.pem
CAFile: /etc/ssl/mongodb/ca.pem
allowConnectionsWithoutCertificates: true
security:
clusterAuthMode: keyFile
keyFile: /etc/ssl/mongodb/keyfile
setParameter:
tlsWithholdClientCertificate: true
  • mode 设置为 allowTLS 接受 TLS 连接,但不要求连接,因此节点可以完成滚动重启而不中断复制。

  • certificateKeyFile 指定节点的证书。将文件名替换为所配置的特定节点的证书密钥文件。CAFile 指定签署节点证书的 CA 证书。

  • allowConnectionsWithoutCertificates 允许客户端在不提供 TLS 证书的情况下连接。

  • clusterAuthMode 设置为 keyFile,使节点能够使用密钥文件进行身份验证。keyFile 指定节点用于相互身份验证的密钥文件。

  • tlsWithholdClientCertificate 可防止节点在向集群中的其他节点建立出站连接时呈现其服务器证书。这是必要的,因为它可防止节点使用服务器身份验证证书进行客户端身份验证,尤其是当证书不包含 clientAuth EKU 时。

3

重启 mongod 进程以应用新的 TLS 配置。要在不停机的情况下应用配置,请以滚动方式重启节点。

在部署的每个托管上,从从节点(secondary node from replica set)开始,以主节点 (primary node in the replica set)结束,运行以下操作:

sudo systemctl restart mongod

要验证滚动重启是否成功完成,请在每个托管上运行以下命令:

sudo systemctl status mongod
4

在所有节点成功重启并启用 TLS 后,请更新每个节点上的配置文件。将 net.tls.modeallowTLS 更改为 requireTLS,以对所有客户端和节点实施加密连接:

net:
tls:
mode: requireTLS
5

重启 mongod 进程以应用新的 TLS 配置。要在不停机的情况下应用配置,请以滚动方式重启节点。

在部署的每个托管上,从从节点(secondary node from replica set)开始,以主节点 (primary node in the replica set)结束,运行以下操作:

sudo systemctl restart mongod

要验证滚动重启是否成功完成,请在每个托管上运行以下命令:

sudo systemctl status mongod

按照此过程配置副本集,以使其在节点之间使用集群内 mTLS 和 X.509 身份验证。

1

重要

Your node certificates must include both serverAuth and clientAuth EKU for intra-cluster mTLS. If your certificates do not include clientAuth, see the Public Certificate Authority Policy Changes Affecting mTLS Technical Advisory for alternative configuration options.

每个节点上,找到并打开 mongod 配置文件。如果该文件不存在,则创建它。添加以下 TLS 选项。使用证书文件的绝对路径。

示例,主节点 (primary node in the replica set)的配置文件如下所示:

net:
tls:
mode: allowTLS
certificateKeyFile: /etc/ssl/mongodb/mongo0.pem
CAFile: /etc/ssl/mongodb/ca.pem
allowConnectionsWithoutCertificates: true
clusterAuthX509:
attributes: O=MongoDB
security:
clusterAuthMode: x509
2

重启 mongod 进程以应用新的 TLS 配置。要在不停机的情况下应用配置,请以滚动方式重启节点。

在部署的每个托管上,从从节点(secondary node from replica set)开始,以主节点 (primary node in the replica set)结束,运行以下操作:

sudo systemctl restart mongod

要验证滚动重启是否成功完成,请在每个托管上运行以下命令:

sudo systemctl status mongod
3

在所有节点成功重启并启用 TLS 后,请更新每个节点上的配置文件。将 net.tls.modeallowTLS 更改为 requireTLS,以对所有客户端和节点实施加密连接:

net:
tls:
mode: requireTLS
4

重启 mongod 进程以应用新的 TLS 配置。要在不停机的情况下应用配置,请以滚动方式重启节点。

在部署的每个托管上,从从节点(secondary node from replica set)开始,以主节点 (primary node in the replica set)结束,运行以下操作:

sudo systemctl restart mongod

要验证滚动重启是否成功完成,请在每个托管上运行以下命令:

sudo systemctl status mongod
5

滚动重启完成后,检查每个节点上的日志,以验证 TLS 配置正确。您的日志必须包括以下内容,以验证 mTLS 和 X.509 身份验证配置正确:

"msg":"Successfully authenticated",
"attr": {
"isClusterMember":true,
"mechanism":"MONGODB-X509",
"user":"CN=mongo1.example.com,O=MongoDB,L=New York City,ST=New-York,C=US"
}

您应该会看到副本集中其他两个节点的类似日志消息。示例,如果您查看 mongo0 上的日志,应该会看到与 mongo1mongo2 相关的类似消息。

要了解如何使用客户端应用程序连接到部署,请继续阅读连接到启用 TLS 的副本集。

给本页内容打分