x.509

在本页面

2.6 版的新功能。

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

x.509 证书身份验证需要安全的TLS/SSL connection

Certificate Authority

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

Client 端 x.509 证书

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

Client 证书要求

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

  • 单个证书颁发机构(CA)必须同时为 Client 端和服务器颁发证书。

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

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

  • 包含专有名称(DN)的 Client 端 x.509 证书的主题必须与会员 x.509 证书的主题“不同”。具体而言,主题必须在以下属性中的至少一项方面有所不同:组织(O),组织单位(OU)或域组件(DC)。

Warning

如果 Client 端 x.509 证书的主题与会员 x.509 证书具有相同的OOUDC组合,则该 Client 端将被标识为群集成员,并被授予对系统的完全许可权。

MongoDB 用户和$ external 数据库

要使用 Client 端证书进行身份验证,您必须首先将 Client 端证书中的subject的值添加为 MongoDB 用户。每个唯一的 x.509Client 端证书都对应一个 MongoDB 用户;也就是说,您不能使用单个 Client 端证书来认证一个以上的 MongoDB 用户。

$external数据库中添加用户;即Authentication Database$external数据库

在版本 3.6.3 中更改:要与$external个身份验证用户(即 Kerberos,LDAP,x.509 用户)一起使用会话,用户名不能超过 10k 字节。

Authenticate

要使用 x.509Client 端证书进行身份验证,请通过 TLS/SSL 连接连接到 MongoDB;即包括--ssl--sslPEMKeyFile命令行选项。

然后在$external数据库中,使用db.auth()Client 端证书对应的用户进行身份验证。

有关示例,请参见使用 x.509 证书对 Client 端进行身份验证

会员 x.509 证书

3.0 版中的新功能。

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

会员证书要求

用于内部身份验证以验证分片群集或副本集成员身份的成员证书必须具有以下属性:

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

  • 在成员证书的subject中找到的专有名称(DN)必须为以下至少个属性指定非空值:组织(O),组织单位(OU)或域组件(DC) 。

  • 组织属性(O),组织单位属性(OU)和域组件(DC)必须与其他群集成员的证书中的属性匹配。为了匹配,证书必须匹配这些属性的所有规范,甚至必须匹配这些属性的非规范。属性的 Sequences 无关紧要。

在下面的示例中,两个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
  • 公用名(CN)或主题备用名(SAN)条目之一必须与集群的其他成员使用的服务器的主机名匹配。

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

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 WebClient 端身份验证”)。
extendedKeyUsage = clientAuth

您还可以使用不包含扩展密钥用法(EKU)的证书。

MongoDB Configuration

要为内部身份验证指定 x.509,除了适用于您的部署的其他 TLS/SSL 配置之外,对于副本集或分片群集的每个成员,还应包括:

会员证书和 PEMKeyFile

要为 Client 证书认证配置 MongoDB,mongodmongos指定PEMKeyFile以通过配置文件中的net.ssl.PEMKeyFile设置或--sslPEMKeyFile命令行选项向 Client 端证明其身份。

如果未为内部成员身份验证指定clusterFile证书,则 MongoDB 将尝试使用PEMKeyFile证书进行成员身份验证。为了将PEMKeyFile证书用于内部身份验证以及 Client 端身份验证,则PEMKeyFile证书必须:

  • 省略extendedKeyUsage

  • 指定extendedKeyUsage值,除了serverAuth还包括clientAuth

有关 x.509 内部身份验证的示例,请参见使用 x.509 证书进行会员身份验证