本教程向您介绍如何将 连接到mongosh 启用 TLS 的自管理副本集。
开始之前
在开始之前,请验证您是否具备以下条件:
步骤
如果您不想使用双向 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设立为签署服务器证书的 CAmongosh证书,以便 可以验证服务器的证书。
在没有客户端证书的情况下进行连接会建立 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设立为签署服务器证书的 CAmongosh证书,以便 可以验证服务器连接。--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() $external方法通过 X. 向509 数据库进行身份验证:
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 进行身份验证。