x.509
在本页面
2.6 版的新功能。
MongoDB 支持 x.509 证书身份验证,用于 Client 端身份验证以及副本集和分片群集成员的内部身份验证。
x.509 证书身份验证需要安全的TLS/SSL connection。
Certificate Authority
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 证书具有相同的O
,OU
和DC
组合,则该 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
包含O
,OU
的匹配规范以及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 配置之外,对于副本集或分片群集的每个成员,还应包括:
-
security.clusterAuthMode和net.ssl.clusterFile(如果使用configuration file),或者
-
--clusterAuthMode
和--sslClusterFile
命令行选项。
会员证书和 PEMKeyFile
要为 Client 证书认证配置 MongoDB,mongod和mongos指定PEMKeyFile
以通过配置文件中的net.ssl.PEMKeyFile设置或--sslPEMKeyFile
命令行选项向 Client 端证明其身份。
如果未为内部成员身份验证指定clusterFile证书,则 MongoDB 将尝试使用PEMKeyFile
证书进行成员身份验证。为了将PEMKeyFile
证书用于内部身份验证以及 Client 端身份验证,则PEMKeyFile
证书必须:
-
省略
extendedKeyUsage
或 -
指定
extendedKeyUsage
值,除了serverAuth
还包括clientAuth
。
有关 x.509 内部身份验证的示例,请参见使用 x.509 证书进行会员身份验证。