使用 x.509 证书进行成员身份验证

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

[NOTE]注意

从 4.0 版开始,MongoDB 在 TLS 1.1+ 可用的系统上禁用对 TLS 1.0 加密的支持。 有关详细信息,请参阅Disable TLS 1.0

启用内部身份验证还会启用Role-Based Access Control。 客户端必须作为用户进行身份验证才能连接并在部署中执行操作。

[IMPORTANT]重要

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

成员 x.509 证书

[NOTE]注意

您必须具有有效的 x.509 证书。

从 MongoDB 4.2 开始,如果在使用 x.509 身份验证时指定 --tlsAllowInvalidateCertificatesnet.tls.allowInvalidCertificates: true ,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。

证书要求

使用成员证书来验证分片集群或副本集的成员身份。 成员证书存储在 net.tls.clusterFile 和 net.tls.certificateKeyFile 中。 会员证件要求:

  • 单个证书颁发机构 (CA) 必须为分片集群或副本集的成员颁发所有 x.509 证书。
  • x.509 证书不能过期。

    [NOTE]注意

    在 4.4 版中更改:如果提供的 x.509 证书在 mongod / mongos 主机系统时间的 30 天内过期,mongod/mongos 会在连接时记录警告。 有关详细信息,请参阅x.509 Certificates Nearing Expiry Trigger Warnings

  • 在成员证书的主题中找到的可分辨名称 (DN) 必须至少为以下属性之一指定非空值:

    • 组织 (O)

    • 组织单位 (OU)

    • 域组件 (DC)

  • 每个集群成员证书在其 net.tls.clusterFilenet.tls.certificateKeyFile 证书中必须具有相同的 Os、OUDC。 这也适用于 tlsX509ClusterAuthDNOverride 值(如果已设置)。 属性顺序无关紧要。

    这是一个例子。 下面两个DNOOU的匹配规范,不指定DC

    CN=host1,OU=Dept1,O=MongoDB,ST=NY,C=US
    C=US, ST=CA, O=MongoDB, OU=Dept1, CN=host2
    

    以下示例不正确,因为 DN 不匹配。 一个 DN 有两个 OU 规范,另一个只有一个 OU 规范。

    CN=host1,OU=Dept1,OU=Sales,O=MongoDB
    CN=host2,OU=Dept1,O=MongoDB
    
  • Common Name (CN) 或 Subject Alternative Name (SAN) 条目之一必须与其他集群成员的服务器主机名匹配。 从 MongoDB 4.2 开始,在比较 SAN 时,MongoDB 可以比较 DNS 名称或 IP 地址。 在以前的版本中,MongoDB 只比较 DNS 名称。

    例如,集群的证书可能具有以下subject

    subject= CN=<myhostname1>,OU=Dept1,O=MongoDB,ST=NY,C=US
    subject= CN=<myhostname2>,OU=Dept1,O=MongoDB,ST=NY,C=US
    subject= CN=<myhostname3>,OU=Dept1,O=MongoDB,ST=NY,C=US
    
  • 如果证书包含扩展密钥用法 (extendedKeyUsage) 设置,则该值必须包含 clientAuth(“TLS Web 客户端身份验证”)。

    extendedKeyUsage = clientAuth
    

配置副本集/分片集群

在滚动升级程序之外,replica setsharded cluster的每个组件都应使用相同的 --clusterAuthMode 设置以确保它可以安全地连接到部署中的所有其他组件。

对于replica set部署,这包括副本集的所有 mongod 成员。

对于sharded cluster部署,这包括所有 mongodmongos 实例。

[NOTE]注意

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

使用命令行选项 (tls)

[NOTE]注意

本节中的过程使用tls设置/选项。 有关使用已弃用的 ssl 别名的过程,请参阅 Use Command-line Options (ssl)

tls设置/选项提供与 ssl 选项相同的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。

TLS(命令行选项)

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> --sslCAFile <path to root CA file> --bind_ip localhost,<hostname(s)|ip address(es)>

TLS(配置文件)

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)>

[IMPORTANT]重要

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

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

有关详细信息,请参阅Configure mongod and mongos for TLS/SSL

使用命令行选项 (ssl)

[NOTE]注意

本节中的过程使用已弃用的 ssl 设置/选项。 有关使用其 tls 别名(在 MongoDB 4.2+ 中可用)的过程,请参阅Use Command-line Options (tls)

tls设置/选项提供与 ssl 选项相同的功能,因为 MongoDB 一直支持 TLS 1.0 及更高版本。

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)>

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)>

[IMPORTANT]重要

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

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

有关详细信息,请参阅Configure mongod and mongos for TLS/SSL

附加信息

要从密钥文件内部身份验证升级到 x.509 内部身份验证,请参阅Upgrade from Keyfile Authentication to x.509 Authentication.

要将证书滚动更新为具有不同 DN 的新证书,请参阅Rolling Update of x.509 Cluster Certificates that Contain New DN

参见

原文 - Use x.509 Certificate for Membership Authentication

译者:景圣

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""