本教程向您展示如何将 连接到启用了mongosh TLS 的自我管理副本集。
开始之前
开始之前,请确认您具有以下内容:
使用 在自管理部署上配置 TLS 中的步骤配置为使用 TLS 的副本集。
在部署上启用 MongoDB 访问控制并创建至少一个管理员用户。要设置访问控制,请参阅 在自管理部署上启用访问控制。此用户必须具有
clusterMonitor权限。如果您想使用 X.509 身份验证连接到部署,请确保已安装 OpenSSL 以生成客户端证书。
访问
mongosh。
步骤
如果不想使用相互 TLS 或 X.509 客户端身份验证,请按照此步骤操作。如果在服务器配置中将 allowConnectionsWithoutCertificates 设置为 true,则客户端可以在不提供证书的情况下连接,并使用 SCRAM 进行身份验证。
使用以下方式连接到您的部署 mongosh
使用以下选项将 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等机制进行身份验证。
对用户进行身份验证
使用 db.auth() 方法使用管理员用户名和密码进行身份验证。
如果您在连接到部署时要使用相互 TLS 和 X.509 客户端身份验证,请按照此程序创建客户端证书并进行身份验证。
生成客户端证书
警告
请勿使用与服务器节点相同的证书。即使服务器证书对于客户端身份验证有效,也必须为 X.509身份验证生成新的客户端证书。
使用 获取 TLS 服务器证书中描述的过程生成客户端证书。进行以下调整:
在配置文件中,设置
extendedKeyUsage = clientAuth而非serverAuth。为节点客户端身份验证证书签名的 CA 还必须为客户端证书签名。通常,这是
ca.pem。但是,如果您获取了用于客户端身份验证的单独证书,则客户端证书的 CA 可能不同。将输出文件命名为
client.key、client.crt和client.pem,而不是证书教程中使用的节点特定名称。
完成该过程后,将 client.pem 复制到运行 mongosh 的计算机上的安全位置:
cp client.pem /etc/ssl/mongodb/client.pem
使用您的客户端证书连接到您的部署
使用以下选项将 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 部署。
以管理员身份进行身份验证
使用 db.auth() 方法使用管理员用户名和密码进行身份验证。
在 数据库中创建用户$external
使用 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" })
最终结果
完成本教程后,mongosh 会通过加密的 TLS 连接连接到副本集,并使用 SCRAM 或 X.509 进行身份验证。