问题:无法使用 TLS 和身份验证连接到 MongoDBMongoDB 设置:我在 Docker 容器上运行 MongoDB,并且已启用 TLS/SSL 和基于角色的访问控制 (RBAC),并使用内部
问题:无法使用 TLS 和身份验证连接到 MongoDBMongoDB 设置:我在 Docker 容器上运行 MongoDB,并且已启用 TLS/SSL 和基于角色的访问控制 (RBAC) 以及内部身份验证。以下是我的设置概要:
MongoDB版本:6.x(在Docker中运行)mongod.conf配置:
net:
port: 27017
bindIp: 0.0.0.0
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongo.pem # Combined certificate and private key
CAFile: /etc/ssl/ca.pem # Certificate Authority file
allowConnectionsWithoutCertificates: false
security:
authorization: "enabled" # Enabling Role-Based Access Control (RBAC)
keyFile: /etc/rs_keyfile # Path to key file for replica set authentication
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
verbosity: 2
证书:mongo.pem:包含服务器证书和私钥。ca.pem:包含签署mongo.pem的CA证书。Docker Compose:MongoDB在Docker容器中运行,我已经使用openssl生成了所需的PEM文件。
如何启动 MongoDB:我使用 Docker 按照上述配置启动 MongoDB。一切似乎都正常启动,但当我尝试使用 mongosh 和 TLS 连接到 MongoDB 时,遇到了连接问题。
连接时出错:我尝试使用以下命令进行连接:
mongosh --tls --tlsCAFile /etc/ssl/ca.pem --tlsCertificateKeyFile /etc/ssl/mongo.pem --host 127.0.0.1 --port 27017
但是,我收到以下错误: MongoServerSelectionError: connection to 127.0.0.1:27017 closed
当使用--tlsAllowInvalidHostnames时,我仍然无法建立成功的连接。
附加信息:我使用 openssl verify 和 openssl s_client 确认了证书,它们似乎有效。日志文件中的错误:我注意到 MongoDB 日志中有以下错误:用户断言 \'NotYetInitialized:未收到任何 replset 配置\'无法检索 $collStats 阶段的 storageStats :: 原因::: 未找到集合 [local.oplog.rs] 问题:证书设置:我为 MongoDB 生成或配置证书的方式是否存在问题?主机名问题:如何正确解决使用 TLS 时本地连接的“主机名不匹配”问题?副本集配置:即使我没有启用复制,我仍然看到副本集错误。这可能与问题有关吗?在此先感谢您的帮助!