如何将客户端(Mongo Shell)连接到 ReplicaSet
没有相互 SSL
在此示例中,我们可能会使用你在“ 如何配置 ReplicaSet 以支持 TLS / SSL? ”部分中生成的 CA 文件(ca.pem)。我们假设 CA 文件位于你当前的文件夹中。
我们假设你的 3 个节点在 mongo1:27017,mongo2:27018 和 mongo3:27019 上运行。 (你可能需要修改 / etc / hosts 文件。)
从 MongoDB 3.2.6 开始,如果你的 CA 文件已在操作系统信任库中注册,则可以在不提供 CA 文件的情况下连接到副本集。
mongo --ssl --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
否则,你必须提供 CA 文件。
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
你现在已连接到 ReplicaSet,并且 Mongo Shell 和 ReplicaSet 之间的所有事务都已加密。
使用相互 SSL
如果你的 ReplicaSet 要求提供客户端证书,则必须提供由 ReplicaSet 部署使用的 CA 签名的证书。生成客户端证书的步骤与生成服务器证书的步骤几乎相同。
实际上,你只需在 CSR 创建期间修改公共名称字段。你不需要在公共名称字段中提供 1 个节点主机名,而是需要提供以逗号分隔的所有 ReplicaSet 主机名。
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr
...
Common Name (e.g. server FQDN or YOUR name) []: mongo1,mongo2,mongo3
如果公共名称字段太长(超过 64 个字节长),则可能会面临公用名称大小限制。要绕过此限制,你必须在生成 CSR 时使用 SubjectAltName。
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr -config <(
cat <<-EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
CN = .
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = mongo1
DNS.2 = mongo2
DNS.3 = mongo3
EOF
)
然后使用 CA 证书和密钥对 CSR 进行签名。
openssl x509 -req -in mongodb_client.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_client.crt
最后,你将密钥和签名证书连接起来。
cat mongodb_client.key mongodb_client.crt > mongodb_client.pem
要连接到 ReplicaSet,你现在可以提供新生成的客户端证书。
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019 --sslPEMKeyFile mongodb_client.pem
你现在已连接到 ReplicaSet,并且 Mongo Shell 和 ReplicaSet 之间的所有事务都已加密。