在本页面
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)。
组织属性(Os),组织单位属性(OUs)和域组件(DCs)必须与其他群集成员的证书(或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设置为x509net.tls.clusterFile或--tlsClusterFile(在MongoDB 4.2中都是新功能)但是,如果未指定集群文件,则成员可以使用在net.tls.certificateKeyFile或
--tlsCertificateKeyFile
(在MongoDB 4.2中都是新增的)中指定的证书密钥文件
进行成员身份验证。这
是使用(和)实例来证明自己的身份给客户,但也可用于会员认证。要同时用于客户端身份验证和成员身份验证,证书必须:certificate key filemongodmongos
extendedKeyUsage或extendedKeyUsage值注意
尽管仍可用,net.ssl.clusterFile但从MongoDB 4.2开始,(以及相应的--sslClusterFile)和net.ssl.PEMKeyFile(以及相应的--sslPEMKeyFile)已被弃用。
对于使用MongoDB 4.0版或更早版本的部署,请使用
net.ssl.clusterFile(或相应的
--sslClusterFile)和
net.ssl.PEMKeyFile(或相应的
--sslPEMKeyFile)。