Docs 菜单
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设立为签署服务器证书的 CAmongosh 证书,以便 可以验证服务器的证书。

在没有客户端证书的情况下进行连接会建立 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设立为签署服务器证书的 CAmongosh 证书,以便 可以验证服务器连接。

  • --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() $external方法通过 X. 向509 数据库进行身份验证:

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 进行身份验证。

后退

在您的部署上配置

在此页面上