另一个“很棒的”MongoDB 文档:
https://www.mongodb.com/docs/manual/reference/method/rs.add/
如果添加的成员有 TLS 连接怎么办? MongoDB 懒得解释这个。
rs0 [direct: primary] admin> rs.add({host: "mail.giftbutton.com:27017/?tls=true&tlsCAFile=/home/buryj/certsMongoMailer/intermRoot.pem&tlsCertificateKeyFile=/home%2Fburyj/certsMongoMailer/clientKey.pem"})
MongoServerError[InvalidReplicaSetConfig]: member: { host: "mail.giftbutton.com:27017/?tls=true&tlsCAFile=/home/buryj/certsMongoMailer/intermRoot.pem&tlsCertificateKeyFile=/home%2Fburyj/certsMongoMailer/clientKey.pem", _id: 1 } :: caused by :: Did not consume whole string.
rs0 [direct: primary] admin> rs.add({host: "mail.giftbutton.com --tls --tlsCAFile /home/buryj/certsMongoMailer/intermRoot.pem --tlsCertificateKeyFile /home/buryj/certsMongoMailer/clientKey.pem"})
MongoNetworkError: connection 2 to 51.89.216.247:27017 closed
admin> rs.add({host: "mail.giftbutton.com --tls --tlsCAFile=/home/buryj/certsMongoMailer/intermRoot.pem --tlsCertificateKeyFile=/home/buryj/certsMongoMailer/clientKey.pem"})
MongoNetworkError: connection 4 to 51.89.216.247:27017 closed
“连接关闭”是当 PRIMARY 刚刚死亡时。
任何有关如何做到这一点的想法都非常感谢!
您没有像这样指定 TLS 选项:
rs.add({host: "mail.giftbutton.com:27017/?tls=true&tlsCAFile=/home/buryj/certsMongoMailer/intermRoot.pem&tlsCertificateKeyFile=/home%2Fburyj/certsMongoMailer/clientKey.pem"})
TLS 选项在配置文件(或命令行参数)中指定:
# network interfaces
net:
port: 27017
bindIpAll: true
tls:
mode: requireTLS
certificateKeyFile: .../server.pem
CAFile: /home/buryj/certsMongoMailer/intermRoot.pem
clusterFile: /home/buryj/certsMongoMailer/clientKey.pem
security:
clusterAuthMode: x509
authorization: enabled
命令是一样的,即
rs.add({host: "mail.giftbutton.com:27017" })
证书有一个重要的限制。
O
成员证书主题名称中的
OU
、
DC
和
clusterFile
部分必须与certificateKeyFile
服务器证书主题名称中的相同。
这意味着一个更重要的约束:您的 client 证书 必须具有与您的服务器证书不同的
O
、OU
和 DC
部分。如果情况并非如此,那么对于每个客户端,只需将 root
添加到连接字符串,即可使用完整系统权限(甚至超过内置
authSource=$exernal
角色)连接到 MongoDB。 .
在 MongoDB 7.0 版本中,您可以通过设置
net.tls.clusterAuthX509.attributes
来更改此行为,但到目前为止我从未使用过它。