对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

在自管理MongoDB上使用 X.509 验证集群成员资格

MongoDB支持与安全TLS/SSL 连接一起使用的 X.509 证书身份验证。分片集群成员和副本集成员可以使用 X.509 证书来验证其集群或副本集身份,而不是使用密钥文件。成员身份验证是一个内部进程。

注意

MongoDB 在支持 TLS 1.1+ 的系统上禁用对 TLS 1.0 加密的支持。

启用内部身份验证还能在自管理部署中实现基于角色的访问控制 。客户端必须通过用户身份验证,才能连接并在部署中执行操作。

重要

TLS/SSL、PKI(公钥基础设施)证书(特别是 X.509 证书)和证书颁发机构的完整说明已超出本文档的范围。本教程假定您已了解 TLS/SSL 并可访问权限有效的 X.509 证书。

注意

您必须拥有有效的 X.509 证书。

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

启用 TLS 后,使用节点证书验证分片集群或副本集的内部连接的节点资格。您可以使用 net.tls.clusterFilenet.tls.certificateKeyFile 选项配置节点证书文件路径。节点具有以下配置要求:

  • 集群成员配置必须为至少一个用于身份验证的属性指定非空值。默认情况下,MongoDB 接受:

    • 组织 (O)

    • 组织单位 (OU)

    • 域组件 (DC)

    MongoDB会验证所有节点证书中的条目是否完全匹配。如果列出多个 OU 值,则所有证书必须使用相同的列表。

    您可以通过设置 net.tls.clusterAuthX509.extensionValue 来指定用于身份验证的替代属性。

  • 集群成员配置必须包含相同的 net.tls.clusterAuthX509.attributes 并使用匹配值。属性顺序不重要。以下示例设置 OOU,但不设置 DC

    net:
    tls:
    clusterAuthX509:
    attributes: O=MongoDB, OU=MongoDB Server

注意

如果将 enforceUserClusterSeparation 参数设置为 false,则会出现以下行为:

  • 您不能将 clusterAuthMode设立为允许 X.509 的选项,否则服务器将无法启动。仅当 clusterAuthModekeyFile 时,服务器才会启动。

  • 客户端可在 $external数据库中创建用户,其 O/OU/DC 属性与服务器为集群成员身份配置的属性相匹配。

  • 提供成员证书的客户端现在可以作为 $external数据库中的用户尝试 MONGODB-X509 身份验证。

要将enforceUserClusterSeparation参数设置为false ,请在启动期间运行以下命令:

mongod --setParameter enforceUserClusterSeparation=false

证书具有以下要求:

  • 必须由一个证书颁发机构 (CA) 为分片集群或副本集的成员颁发所有 X.509 证书。

  • 至少一个主题备用名称 (SAN) 条目必须与其他集群成员使用的服务器主机名匹配。比较 SAN时,MongoDB 可以比较 DNS 名称或 IP 地址。

    If you don't specify subjectAltName, MongoDB compares the Common Name (CN) instead. However, this usage of CN is deprecated per RFC2818

密钥用法和扩展密钥用法是 X.509 扩展,严格定义和限制与证书关联的密钥的使用。这两个扩展都是可选的。如果 tlsCertificateKeyFiletlsClusterFile点省略这些扩展的证书,应用使用该证书不受限制。

如果用于 tlsCertificateKeyFiletlsClusterFile 的 X.509 证书包含扩展密钥用法 (EKU) 扩展,则它们必须符合以下规则:

  • tlsCertificateKeyFile 必须在 EKU 中包含 serverAuth

    extendedKeyUsage = serverAuth
  • tlsClusterFile 必须在 EKU 中包含 clientAuth

    extendedKeyUsage = clientAuth
  • 如果省略 tlsClusterFile 且仅配置了 tlsCertificateKeyFile,则 tlsCertificateKeyFile 必须在 EKU 中同时包含 serverAuthclientAuth

    extendedKeyUsage = clientAuth, serverAuth

如果用于 tlsCertificateKeyFiletlsClusterFile 的 X.509 证书包含密钥用法 (KU) 扩展,请按以下方式设立:

  • tlsCertificateKeyFile 应在其 KU 扩展中包含 digitalSignaturekeyEnciphermentkeyAgreement

    keyUsage = digitalSignature, keyEncipherment, keyAgreement
  • tlsClusterFile 应在其 KU 扩展中包含 digitalSignature

    keyUsage = digitalSignature

在滚动升级程序之外,副本集分片集群的每个组件都应使用相同的 --clusterAuthMode 设置,以确保能安全地连接到部署中的所有其他组件。

对于副本集部署,其中包括副本集的所有 mongod 节点。

对于分片集群部署,其中包括所有 mongodmongos 实例。

注意

link_link__5o4lllink_link__5o4ll,默认绑定到本地主机。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署,则必须指定 --bind_ipnet.bindIp

注意

The procedures in this section use the tls settings/option. For procedures using the deprecated ssl aliases, see Use Command-line Options (ssl).

由于 MongoDB 始终支持 TLS 1.0 及更高版本,因此 tls 设置/选项可提供与 ssl 选项相同的功能。

mongod --replSet <name> --tlsMode requireTLS --clusterAuthMode x509 --tlsClusterFile <path to membership certificate and key PEM file> --tlsCertificateKeyFile <path to TLS/SSL certificate and key file> --tlsCAFile <path to root CA file> --bind_ip localhost,<hostname(s)|ip address(es)>

重要

要使用 X.509身份验证,必须指定 --tlsCAFilenet.tls.CAFile,除非您使用 --tlsCertificateSelector--net.tls.certificateSelector

包括特定配置所需的任何其他选项(TLS/SSL 或其他)。对于

security:
clusterAuthMode: x509
net:
tls:
mode: requireTLS
certificateKeyFile: <path to its TLS/SSL certificate and key file>
CAFile: <path to root CA PEM file to verify received certificate>
clusterFile: <path to its certificate key file for membership authentication>
bindIp: localhost,<hostname(s)|ip address(es)>

重要

要使用 X.509身份验证,必须指定 --tlsCAFilenet.tls.CAFile,除非您使用 --tlsCertificateSelector--net.tls.certificateSelector

包括特定配置所需的任何其他选项(TLS/SSL 或其他)。

有关更多信息,请参阅配置 MongoDB 实例以进行 TLS/SSL 加密。

注意

The procedures in this section use the deprecated ssl settings/option. For procedures that use tls aliases, see Use Command-line Options (tls).

由于 MongoDB 始终支持 TLS 1.0 及更高版本,因此 tls 设置/选项可提供与 ssl 选项相同的功能。

要指定用于内部集群节点身份身份验证的 X.509 证书,请附加额外的 TLS/SSL 选项 --clusterAuthMode--sslClusterFile,如以下针对副本集的示例:

mongod --replSet <name> --sslMode requireSSL --clusterAuthMode x509 --sslClusterFile <path to membership certificate and key PEM file> --sslPEMKeyFile <path to TLS/SSL certificate and key PEM file> --sslCAFile <path to root CA PEM file> --bind_ip localhost,<hostname(s)|ip address(es)>

重要

要使用 X.509身份验证,必须指定 --tlsCAFilenet.tls.CAFile,除非您使用 --tlsCertificateSelector--net.tls.certificateSelector

包括特定配置所需的任何其他选项(TLS/SSL 或其他)。

security:
clusterAuthMode: x509
net:
ssl:
mode: requireSSL
PEMKeyFile: <path to TLS/SSL certificate and key PEM file>
CAFile: <path to root CA PEM file>
clusterFile: <path to X.509 membership certificate and key PEM file>
bindIp: localhost,<hostname(s)|ip address(es)>

重要

要使用 X.509身份验证,必须指定 --tlsCAFilenet.tls.CAFile,除非您使用 --tlsCertificateSelector--net.tls.certificateSelector

包括特定配置所需的任何其他选项(TLS/SSL 或其他)。

有关更多信息,请参阅配置 MongoDB 实例以进行 TLS/SSL 加密。

要从密钥文件内部身份验证升级到 X.509 内部身份验证,请参阅从密钥文件身份验证升级到 X.509 身份验证。

要对具有不同 DN 的证书执行滚动更新,请参阅在没有 clusterAuthX509 的集群上轮换证书。