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

连接到启用 TLS 的副本集

本教程向您展示如何将 连接到启用了mongosh TLS 的自我管理副本集。

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

  • 使用 在自管理部署上配置 TLS 中的步骤配置为使用 TLS 的副本集。

  • 在部署上启用 MongoDB 访问控制并创建至少一个管理员用户。要设置访问控制,请参阅 在自管理部署上启用访问控制。此用户必须具有 clusterMonitor 权限。

  • 如果您想使用 X.509 身份验证连接到部署,请确保已安装 OpenSSL 以生成客户端证书。

  • 访问mongosh

如果不想使用相互 TLS 或 X.509 客户端身份验证,请按照此步骤操作。如果在服务器配置中将 allowConnectionsWithoutCertificates 设置为 true,则客户端可以在不提供证书的情况下连接,并使用 SCRAM 进行身份验证。

1

使用以下选项将 mongosh 连接到副本集:

mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \
--tls --tlsCAFile /etc/ssl/mongodb/ca.pem
  • --tls 为连接启用 TLS 加密。

  • --tlsCAFile 设置为签署服务器证书的 CA 证书,以便 mongosh 可以验证服务器的证书。

在没有客户端证书的情况下连接可建立 TLS 加密会话,但不会验证您。要运行大多数命令,必须使用SCRAM等机制进行身份验证。

2

使用 db.auth() 方法使用管理员用户名和密码进行身份验证。

3

运行以下命令以确认身份验证状态:

db.adminCommand({ connectionStatus: 1 })

确认 authInfo.authenticatedUsers 包含预期用户。

如果您在连接到部署时要使用相互 TLS 和 X.509 客户端身份验证,请按照此程序创建客户端证书并进行身份验证。

1

警告

请勿使用与服务器节点相同的证书。即使服务器证书对于客户端身份验证有效,也必须为 X.509身份验证生成新的客户端证书。

使用 获取 TLS 服务器证书中描述的过程生成客户端证书。进行以下调整:

  • 在配置文件中,设置 extendedKeyUsage = clientAuth 而非 serverAuth

  • 为节点客户端身份验证证书签名的 CA 还必须为客户端证书签名。通常,这是 ca.pem。但是,如果您获取了用于客户端身份验证的单独证书,则客户端证书的 CA 可能不同。

  • 将输出文件命名为 client.keyclient.crtclient.pem,而不是证书教程中使用的节点特定名称。

完成该过程后,将 client.pem 复制到运行 mongosh 的计算机上的安全位置:

cp client.pem /etc/ssl/mongodb/client.pem
2

确定客户端证书的主题。连接后,您需要此值来确认使用预期客户端证书进行了身份验证。

要查看主题,请运行以下命令:

openssl x509 -in /etc/ssl/mongodb/client.pem -noout -subject

记下输出,其外观类似于以下内容:

subject=C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser

保存主题名称,以便在本教程中后续使用。在本示例中,主题名称为 C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser

3

使用以下选项将 mongosh 连接到副本集:

mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \
--tls \
--tlsCAFile /etc/ssl/mongodb/ca.pem \
--tlsCertificateKeyFile /etc/ssl/mongodb/client.pem
  • --tls 为连接启用 TLS 加密。

  • --tlsCAFile 设置为签名了服务器证书的 CA 证书,以便 mongosh 可以验证服务器连接。

  • --tlsCertificateKeyFile 提供客户端证书和私钥,服务器使用这些证书和私钥通过 X.509 验证您的连接。

这使您可以通过 TLS 连接到 MongoDB 部署。

4

使用 db.auth() 方法使用管理员用户名和密码进行身份验证。

5

使用 db.createUser() 方法在 $external 数据库中创建与客户端证书主题名称对应的用户。将用户名替换为之前确定的客户端证书主题:

db.getSiblingDB("$external").runCommand({
createUser: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser",
roles: [
{ role: "readWriteAnyDatabase", db: "admin" }
]
})

创建用户后,使用 db.auth() 方法使用 X.509 对 $external 数据库进行身份验证:

db.getSiblingDB("$external").auth({
mechanism: "MONGODB-X509",
user: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser"
})
6

运行以下命令以确认身份验证状态:

db.adminCommand({ connectionStatus: 1 })

确认 authInfo.authenticatedUsers 包含预期用户。

完成本教程后,mongosh 会通过加密的 TLS 连接连接到副本集,并使用 SCRAM 或 X.509 进行身份验证。