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

在自管理部署上配置 TLS

本教程向您展示如何在自管理副本集上配置 TLS。根据是否要使用集群内mTLS选择一种方法,这是在节点之间启用X.509身份验证必需的。

重要

这些步骤适用于自管理 MongoDB 部署。MongoDB Atlas 集群默认使用 TLS。如果使用 Cloud Manager 或 Ops Manager,请通过部署管理工具配置 TLS。

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

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

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

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

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

  • 访问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

重要

您的节点证书必须包含集群内serverAuth clientAuthmTLS 的 和 EKU。如果您的证书不包含clientAuth ,请参阅影响 mTLS 的公共证书颁发机构策略更改技术咨询以了解备用配置选项。

每个节点上,找到并打开 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 的副本集。