gpt4 book ai didi

MongoDB 服务器接受服务器证书作为客户端证书

转载 作者:行者123 更新时间:2023-12-04 22:40:00 25 4
gpt4 key购买 nike

我似乎对 MongoDB 中的 x509 证书身份验证有点困惑。
TLDR :
我创建了服务器和客户端证书(由相同的 CA 签名,但 CN 和 OU 不同),在 MongoDB 中使用主题名称作为用户名创建了一个用户,并使用 c# 客户端 + 客户端证书成功连接。
使用 MongoDB Compass,我能够使用服务器证书作为客户端证书连接到服务器并从中读取数据。
为什么我能够使用错误的证书进行身份验证?是否无法基于每个证书控制权限?
扩展 :
我使用 OpenSSL 创建了一个自签名根 CA,它签署了另一个证书,即我的 Signing-CA。
使用此签名 CA,我又创建了两个证书:

  • 服务器证书(CN=Server1,OU=Servers,O=project,ST=SH,C=DE)
  • 客户端证书(CN=Client1,OU=Clients,O=project,ST=SH,C=DE)

  • 有了这些证书,我无需身份验证就启动了 MongoDB 实例,启动了副本集并使用以下命令为证书创建了一个用户: db.getSiblingDB("$external").runCommand({createUser: "CN=Client1,OU=Clients,O=project,ST=SH,C=DE",roles: [{role: "readWrite", db: "admin"}, {role: "userAdminAnyDatabase", db: "admin"}, {role: "clusterAdmin", db: "admin"}, {role: "root", db: "admin"}]}); .
    我重新启动了服务器,这次使用更多参数来启动启用身份验证: --replSet *replicaSetName* --port *port* --dbpath *path* --logpath *path* --tlsMode requireTLS --clusterAuthMode x509 --tlsCAFile *path* --tlsCertificateKeyFile *path* --tlsClusterFile *path* --auth我能够使用 C# 客户端毫无问题地连接,MongoDB Compass 也能正常工作。
    但是当我测试其他证书来验证安全性时,我注意到完全可以使用服务器证书和 key 文件使用 MongoDB 指南针连接到服务器。
    我不仅可以连接,还可以浏览和修改数据。
    我的印象是每个客户端证书都必须在 $external 数据库中有一个关联的帐户,因此只有我分配/授予此特定用户帐户的权限/角色。
    这种行为应该发生吗?
    是否可以为每个客户证书创建一个用户帐户并在不同的数据库上授予不同的权限?
    感谢您的关注和回答,祝您有美好的一天!

    最佳答案

    这取决于您如何配置 mongod 进程。假设您有 mongod 的配置文件(默认路径是/etc/mongod.conf),您会查看是否有 net.tlssecurity.clusterAuthMode设置..
    具有以下设置的示例配置文件:

    storage:
    dbPath: /data/db
    journal:
    enabled: true
    systemLog:
    destination: file
    logAppend: true
    path: /var/log/mongodb/mongod.log
    net:
    port: 27017
    bindIp: 0.0.0.0
    tls:
    mode: requireTLS
    certificateKeyFile: /etc/ssl/node1.pem
    CAFile: /etc/ssl/ca.crt
    clusterFile: /etc/ssl/node1.pem
    processManagement:
    fork: true
    pidFilePath: /var/run/mongodb/mongod.pid
    timeZoneInfo: /usr/share/zoneinfo
    security:
    authorization: enabled
    clusterAuthMode: x509
    replication:
    replSetName: replset
    其他
    最近 MongoDB 从 SSL 切换至 TLS因此,根据您使用的版本,您可能会找到 SSL而不是 TLS .
    此外,您可能正在使用副本集,也可能没有。如果使用副本集,您需要决定副本集成员如何向其他成员进行身份验证。它应该使用 key 文件,还是应该使用 x509 以及普通数据库用户。
    此外,您将需要创建至少一个命名数据库用户。如果连接的用户绑定(bind)到 localhost 并且不存在其他用户,系统将允许对连接的用户进行 root 访问。这称为 localhost exception .缺少这些步骤是不完整且不安全的安装。

    关于MongoDB 服务器接受服务器证书作为客户端证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68547085/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com