在本页面
MongoDB支持x.509证书身份验证,用于客户端身份验证以及副本集和分片群集成员的内部身份验证。
x.509证书身份验证需要安全的TLS / SSL连接。
注意
从版本4.0开始,MongoDB在可用TLS 1.1+的系统上禁用对TLS 1.0加密的支持。有关更多详细信息,请参阅禁用TLS 1.0。
对于生产用途,您的MongoDB部署应使用由单个证书颁发机构生成和签名的有效证书。您或您的组织可以生成和维护独立的证书颁发机构,也可以使用第三方TLS / SSL供应商生成的证书。获取和管理证书超出了本文档的范围。
若要向服务器进行身份验证,客户端可以使用x.509证书代替用户名和密码。
客户端证书必须具有以下属性:
单个证书颁发机构(CA)必须同时为客户端和服务器颁发证书。
客户端证书必须包含以下字段:
每个唯一的MongoDB用户必须具有唯一的证书。
客户端X.509证书的主题,其中包含了专有名称(DN
),必须区别从一个的
成员X.509证书。具体而言,主题必须至少具有以下属性之一:组织(O
),组织单位(OU
)或域组件(DC
)。
如果已tlsX509ClusterAuthDNOverride
设置MongoDB部署
(从MongoDB 4.2开始可用),则客户端x.509证书的主题也必须与此值不同。
警告
如果客户端x.509证书的主题与成员x.509证书(或已
设置)具有相同的O
,
OU
和DC
组合
,则该客户端将被标识为群集成员,并被授予对系统的完全权限。tlsX509ClusterAuthDNOverride
$external
数据库¶要使用客户端证书进行身份验证,您必须首先将客户端证书中的的值添加subject
为MongoDB用户。每个唯一的x.509客户端证书都对应一个MongoDB用户;也就是说,您不能使用单个客户端证书来认证一个以上的MongoDB用户。
在$external
数据库中添加用户;即
认证数据库是$external
数据库
在版本3.6.3中更改:要与$external
身份验证用户(即Kerberos,LDAP,x.509用户)一起使用会话,用户名不能大于10k字节。
要使用x.509客户端证书进行连接和身份验证,请执行以下操作:
--tls
(或不建议使用的--ssl
选项)--tlsCertificateKeyFile
(或不建议使用的--sslPEMKeyFile
选项)--tlsCertificateKeyFilePassword
(或不建议使用的--sslPEMKeyPassword
选项)证书密钥文件是否已加密--authenticationDatabase '$external'
--authenticationMechanism MONGODB-X509
您还可以先建立TLS / SSL连接,然后db.auth()
在$external
数据库中使用
它进行身份验证。
有关两种情况的示例,请参阅使用x.509证书对客户端进行身份验证 中的使用x.509证书进行身份验证(使用tls选项)部分。
对于内部身份验证,分片群集和副本集的成员可以使用x.509证书代替使用SCRAM身份验证机制的 密钥文件。
用于验证分片群集或副本集的成员资格的成员证书(net.tls.clusterFile
,如果指定,则为net.tls.certificateKeyFile
)必须具有以下属性:
单个证书颁发机构(CA)必须为分片群集或副本集的成员颁发所有x.509证书。
DN
在成员证书的中subject
,专有名称()
必须为以下属性中的至少一个指定非空值:组织(O
),组织单位(OU
)或域组件(DC
)。
组织属性(O
s),组织单位属性(OU
s)和域组件(DC
s)必须与其他群集成员的证书(或tlsX509ClusterAuthDNOverride
值,如果已设置)相匹配。
为了匹配,证书必须匹配这些属性的所有规范,甚至必须匹配这些属性的非规范。属性的顺序无关紧要。
在下面的例子中,两个DN
的包含用于匹配的规格O
,OU
以及所述的非规范DC
属性。
但是,以下两个DN
包含不匹配的
OU
属性,因为一个包含两个OU
规范,另一个包含一个规范。
公用名(CN
)或主题备用名(SAN
)之一必须与服务器的主机名匹配,该主机名由集群的其他成员使用。从MongoDB 4.2开始,在执行SAN比较时,MongoDB支持DNS名称或IP地址的比较。在以前的版本中,MongoDB仅支持DNS名称的比较。
例如,群集的证书可以具有以下主题:
如果证书包含扩展密钥用法(extendedKeyUsage
)设置,则该值必须包含clientAuth
(“ TLS Web客户端身份验证”)。
您还可以使用不包含扩展密钥用法(EKU)的证书。
除了适合您的部署的任何TLS / SSL配置之外,还包括以下内容,以便为副本集(即mongod
实例)或分片群集(即
mongod
和mongos
实例)的每个成员指定用于内部身份验证的x.509
:
security.clusterAuthMode
或--clusterAuthMode
设置为x509
net.tls.clusterFile
或--tlsClusterFile
(在MongoDB 4.2中都是新功能)但是,如果未指定集群文件,则成员可以使用在net.tls.certificateKeyFile
或
--tlsCertificateKeyFile
(在MongoDB 4.2中都是新增的)中指定的证书密钥文件
进行成员身份验证。这
是使用(和)实例来证明自己的身份给客户,但也可用于会员认证。要同时用于客户端身份验证和成员身份验证,证书必须:certificate key file
mongod
mongos
extendedKeyUsage
或extendedKeyUsage
值注意
尽管仍可用,net.ssl.clusterFile
但从MongoDB 4.2开始,(以及相应的--sslClusterFile
)和net.ssl.PEMKeyFile
(以及相应的--sslPEMKeyFile
)已被弃用。
对于使用MongoDB 4.0版或更早版本的部署,请使用
net.ssl.clusterFile
(或相应的
--sslClusterFile
)和
net.ssl.PEMKeyFile
(或相应的
--sslPEMKeyFile
)。