Docs 菜单
Docs 主页
/
MongoDB Manual
/

x.509

在此页面上

  • 证书颁发机构
  • 客户端 x.509 证书
  • 成员 x.509 证书

MongoDB 支持将 x.509 证书身份验证用于客户端身份验证,以及副本集和分片集群成员的内部身份验证。

x。 509证书身份验证需要安全的 TLS/SSL 连接。

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

要对服务器进行身份验证,客户端可以使用 x.509 证书来替代用户名和密码。

客户端证书必须具有以下属性:

  • 必须由一个证书颁发机构 (CA) 同时向客户端和服务器颁发证书。

  • 客户端证书必须包含以下字段:

    keyUsage = digitalSignature
    extendedKeyUsage = clientAuth
  • 每个唯一的 MongoDB 用户必须拥有唯一的证书。

  • 客户端 x。 509证书的主题(包含标识名 ( DN ))必须成员 x 的主题不同。 509证书。

    重要

    如果客户端 x.509 证书的主题与成员 x.509 证书(或 tlsX509ClusterAuthDNOverride,如果设置)的 OOUDC 属性完全匹配,则会接受该客户端连接并授予完整权限,且会在日志中显示一条警告消息。

    只有集群成员 x509 证书应使用相同的 OOUDC 属性组合。

    如果 MongoDB 部署设置了tlsX509ClusterAuthDNOverride ,则客户端 x. 509证书的主题不得与该值匹配。

    如果 MongoDB 部署设置了tlsX509ClusterAuthDNOverride ,则客户端 x. 509证书的主题也必须与该值不同。

  • x.509 证书不能过期。

    如果显示的 x.509 证书在 mongod/mongos 主机系统时间后的 30 天内过期,则 mongod / mongos 会在连接时记录警告。请参阅 x.509 证书即将过期触发警告,了解更多信息。

要使用客户端证书进行身份验证,您必须首先作为 MongoDB 用户添加客户端证书中subject的值。 每个唯一的 x。 509客户端证书对应于单个 MongoDB 用户。 您不能使用单个客户端证书对多个 MongoDB 用户进行身份验证。

$external数据库中添加用户。 $external数据库是用户的身份验证数据库

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

从 MongoDB 5.0 开始,mongodmongos 现在会在其证书不包含主题备用名称属性时,在启动阶段发出警告。

以下平台不支持通用名称验证:

  • iOS 13 及更高版本

  • MacOS 10.15 及更高版本

  • Go 1.15 及更高版本

使用这些平台的客户端不会向使用 X.509 证书(其主机名 CommonName 属性指定)的 MongoDB Server进行 身份验证 。

对于分片集群和副本集成员之间的内部身份验证,您可以使用 x。 509证书而不是密钥文件,它使用SCRAM身份验证机制。

用于验证分片集群或副本集成员资格的成员证书( net.tls.clusterFile ,如果已指定,则为net.tls.certificateKeyFile )必须具有以下属性:

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

  • 在成员证书的subject中找到的标识名 ( DN ) 必须为以下至少一个属性指定非空值:

    • 组织 (O)

    • 组织单位 (OU)

    • 域组件 (DC)

  • 组织属性( O )、组织单位属性( OU )和域组件( DC )必须与net.tls.clusterFilenet.tls.certificateKeyFile证书中的属性相匹配,其他集群成员(或tlsX509ClusterAuthDNOverride值,如果已设置)。

    要匹配,证书必须匹配这些属性的所有规范,甚至是这些属性的非规范。 属性的顺序并不重要。

    在以下示例中,两个DN包含OOU的匹配规范以及DC属性的非规范。

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

    但是,以下两个DN包含不匹配的OU属性,因为一个 包含两个OU规范,而另一个仅包含一个规范。

    CN=host1,OU=Dept1,OU=Sales,O=MongoDB
    CN=host2,OU=Dept1,O=MongoDB
  • 在多集群部署中,每个集群必须使用不同的 X. 509成员证书。 每个证书的OOUDC标识名 (DN) 字段必须具有唯一值。

    如果两个集群的证书具有相同 DN 值,则一个集群上的受感染服务器可以作为另一个集群的成员进行身份验证。

  • 公用名 ( CN ) 或主题备用名称 ( SAN ) 条目之一必须与其他集群成员的服务器主机名匹配。 从 MongoDB 4.2 开始,在比较SAN时,MongoDB 可以比较 DNS 名称或 IP 地址。 在以前的版本中,MongoDB 仅比较 DNS 名称。

    例如,集群的证书可能具有以下主题:

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

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

    extendedKeyUsage = clientAuth
  • x.509 证书不能过期。

    如果显示的 x.509 证书在 mongod/mongos 主机系统时间后的 30 天内过期,则 mongod / mongos 会在连接时记录警告。请参阅 x.509 证书即将过期触发警告,了解更多信息。

您可以使用 TLS 在副本集(每个mongod 实例)或分片集群(每个 mongodmongos 实例)的每个节点之间进行内部身份验证。

要使用 TLS 进行内部身份验证,请使用以下设置:

mongodmongos实例使用其证书密钥文件向客户端证明其身份,但也可用于成员身份验证。 如果不指定集群文件,成员将使用其证书密钥文件进行成员身份验证。 使用net.tls.certificateKeyFile--tlsCertificateKeyFile指定证书密钥文件。

要将certificate key file用于客户端身份验证和成员身份验证,证书必须满足以下任一条件:

  • 省略 extendedKeyUsage

  • 指定 extendedKeyUsage = serverAuth, clientAuth

后退

对客户端进行身份验证

来年

对客户端进行身份验证