Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

使用 x。用于在自管理部署上对客户端进行身份验证的509证书

在此页面上

  • 先决条件
  • 步骤
  • 后续步骤

以下过程设置了 x。509 证书身份验证,用于在独立运行mongod 实例上进行客户端身份验证。这也称为双向 TLS 或 mTLS。

要对副本集或分片集群使用 x.509 身份验证,请参阅使用 x.509 证书进行成员身份验证

TLS/SSL、PKI(公钥基础设施)证书(尤其是 x.509 证书)和证书颁发机构的完整描述已超出本文档的范围。本教程假设您已了解 TLS/SSL 且能访问有效的 x.509 证书。

对于生产用途,MongoDB 部署应使用由证书颁发机构生成和签名的有效证书。您或您的组织可以生成并维护独立的证书颁发机构,或使用第三方 TLS 供应商生成的证书。获取和管理证书超出了本文档的范围。

如果使用 x.509 身份验证,则必须指定 --tlsCAFilenet.tls.CAFile,除非使用 --tlsCertificateSelector--net.tls.certificateSelector

您必须拥有有效的 x.509 证书。客户 x.509 证书必须符合客户端证书要求。

如果您指定 --tlsAllowInvalidCertificatesnet.tls.allowInvalidCertificates: true,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。

1

您可以通过命令行为 x.509 身份验证配置 mongod 实例。

要配置独立运行的 mongod实例,请运行以下命令:

mongod --tlsMode requireTLS \
--tlsCertificateKeyFile <path to TLS/SSL certificate and key PEM file> \
--tlsCAFile <path to root CA PEM file> --bind_ip <hostnames>

根据配置要求包括其他选项。

x.509 配置需要用到:

选项
注意
指定 requireTLS
指定要提供给客户端的实例的 x.509 证书。
指定证书颁发机构文件以验证该实例所提供的证书。

您可以在配置文件中为 x.509 身份验证配置一个 mongod

要配置独立运行的 mongod 实例,请将以下配置选项添加到配置文件中:

net:
tls:
mode: requireTLS
certificateKeyFile: <path to TLS/SSL certificate and key PEM file>
CAFile: <path to root CA PEM file>

根据配置要求包括其他选项。

x.509 配置需要用到:

选项
注意
指定 requireTLS
指定要提供给客户端的实例的 x.509 证书。
指定证书颁发机构文件以验证该实例所提供的证书。

要为副本集或分片集群设置 x.509 身份验证,请参阅使用 x.509 证书进行成员身份验证(适用于自管理 MongoDB)。

2

要使用客户端证书进行身份验证,必须先以 MongoDB 用户身份将客户端证书中的 subject 值添加到 $external 数据库。每个唯一的 x.509 客户端证书对应一个 MongoDB 用户。您不能使用一个客户端证书验证多个 MongoDB 用户。

注意

用户名要求

  • 要对 $external 身份验证用户(Kerberos、LDAP 或 x.509 用户)使用客户端会话和因果一致性保证,用户名不能大于 10k 字节。

  • 中的 RDNsubjectstring 必须与 RFC2253 标准。

  1. 您可以使用以下命令从客户端证书检索 RFC2253 格式的 subject

    openssl x509 -in <pathToClientPEM> -inform PEM -subject -nameopt RFC2253

    此命令将返回 subject 字符串和证书:

    subject= CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry
    -----BEGIN CERTIFICATE-----
    # ...
    -----END CERTIFICATE-----
  2. 添加符合 RFC2253subject 值作为用户。根据需要省略空格。

    以下示例添加了一个用户,并为该用户授予 test 数据库中的 readWrite 角色以及 userAdminAnyDatabase 角色:

    db.getSiblingDB("$external").runCommand(
    {
    createUser: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry",
    roles: [
    { role: "readWrite", db: "test" },
    { role: "userAdminAnyDatabase", db: "admin" }
    ],
    writeConcern: { w: "majority" , wtimeout: 5000 }
    }
    )

    有关添加具有角色的用户的详细信息,请参阅管理自管理部署中的用户和角色

3

x.509 客户端证书主题添加为相应的 MongoDB 用户后,您可以使用该客户端证书进行身份验证:

要在连接过程中进行身份验证,请运行以下命令:

mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
--tlsCAFile <path to root CA PEM file> \
--authenticationDatabase '$external' \
--authenticationMechanism MONGODB-X509
选项
注意
指定客户端的 x.509 文件。
指定证书颁发机构文件,以验证 mongod 实例所提供的证书。
指定 '$external'
指定 MONGODB-X509

您可以在不进行身份验证的情况下进行连接,并在连接后使用 db.auth() 方法进行身份验证。

例如,如果使用 mongosh

  1. mongosh 连接到 mongod

    mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \
    --tlsCAFile <path to root CA PEM file>
    选项
    注意
    指定客户端的 x.509 文件。
    指定证书颁发机构文件,以验证 mongodmongos 实例所提供的证书。
  2. 要进行身份验证,请使用 $external 数据库中的 db.auth() 方法。在 mechanism 字段中,指定 "MONGODB-X509"

    db.getSiblingDB("$external").auth(
    {
    mechanism: "MONGODB-X509"
    }
    )

要对副本集或分片集群使用 x.509 身份验证,请参阅使用 x.509 证书进行成员身份验证

后退

x.509