Docs 菜单

使用 X.509 证书对自管理MongoDB进行成员身份验证

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

注意

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

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

  • 有关向部署中添加用户的说明,请参阅“在托管部署中管理用户和角色”教程。

  • 509有关使用 X.509 证书进行用户身份验证的说明,请参阅使用 X. 证书对自托管部署上的客户端进行身份验证教程。

重要

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

注意

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

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

使用成员证书来验证分片集群或副本集的成员资格。成员证书文件路径用 net.tls.clusterFilenet.tls.certificateKeyFile 选项配置。成员具有以下配置要求:

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

    • 组织 (O)

    • 组织单位 (OU)

    • 域组件 (DC)

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

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

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

证书具有以下要求:

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

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

    如果您不指定subjectAltName ,MongoDB 会改为比较公用名 (CN)。 但是,根据 RFC ,CN 的这种用法已被弃用2818

  • 如果用作 certificateKeyFile 的证书包含 extendedKeyUsage,则该值必须同时包含 clientAuth(“TLS Web 客户端身份验证”)和 serverAuth(“TLS Web 服务器身份验证”)。

    extendedKeyUsage = clientAuth, serverAuth
  • 如果用作 clusterFile 的证书包含 extendedKeyUsage,则该值必须包含 clientAuth

    extendedKeyUsage = clientAuth

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

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

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

注意

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

注意

本部分中的过程将使用 tls 设置/选项。有关使用已弃用的 ssl 别名的过程,请参阅使用命令行选项 (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 或其他)。

如需了解更多信息,请参阅为 TLS/SSL 配置 mongodmongos

注意

本部分中的过程使用已弃用的ssl设置/选项。 有关使用tls别名的过程,请参阅使用命令行选项 ( 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 或其他)。

如需了解更多信息,请参阅为 TLS/SSL 配置 mongodmongos

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

要将证书滚动更新为具有不同DN 的新证书,请参阅在自管理集群上轮换 X.509 不带 clusterAuthX509 属性的证书。