Docs 菜单
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指定节点的证书。将文件名替换为要配置的特定节点的证书密钥文件。 指定签署节点证书的 CACAFile 证书。

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

  • clusterAuthModekeyFile 设立为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
  • mode将 设立为allowTLS 可以接受但不强制要求进行 TLS 连接,因此节点可以在不中断复制的情况下完成滚动重启。

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

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

  • net.tls.clusterAuthX509.attributes指定 X.509 证书属性,用于将节点标识为集群成员,而不是常规客户端。有关所需的证书属性,请参阅成员 X.509 证书。

  • clusterAuthMode将 设立为x509 使节点能够使用 X.509 证书进行身份验证。

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 的副本集。

后退

获取证书

在此页面上