您可以要求副本集和分片 群集的成员彼此进行身份验证。对于成员的内部身份验证,MongoDB可以使用 密钥文件或x.509证书。
所选方法用于所有内部通讯。例如,当一个客户端验证到一mongos
所支持的使用一个
认证机制中,mongos
然后使用配置的内部认证方法连接到所需要的mongod
过程。
注意
启用内部身份验证也会启用客户端授权。
密钥文件使用SCRAM质询和响应身份验证机制,其中密钥文件包含成员的共享密码。
密钥的长度必须在6到1024个字符之间,并且只能包含base64集中的字符。MongoDB去除空格字符(例如x0d
,x09
和x20
),以方便跨平台使用。结果,以下操作产生相同的密钥:
从MongoDB 4.2开始,用于内部成员身份验证的密钥文件使用YAML格式,以允许密钥文件中包含多个密钥。YAML格式接受以下内容:
YAML格式与使用文本文件格式的现有单键密钥文件兼容。
例如,
在文件中指定多个密钥的能力允许对密钥进行滚动升级,而无需停机。见 旋转键副本集和 旋转键分片集群。
所有mongod
和mongos
部署的情况下,必须至少有一个通用密钥。
在UNIX系统上,密钥文件不得具有组或世界权限。在Windows系统上,不检查密钥文件权限。
您必须将密钥文件存储在承载副本集或分片群集成员的每台服务器上。
[1] | (1,2)对于MongoDB的加密存储引擎,该密钥文件用于本地密钥管理只能包含单个密钥。 |
要指定密钥文件,请使用security.keyFile
设置或
--keyFile
命令行选项。
有关密钥文件内部身份验证的示例,请参阅 “将副本副本设置为密钥文件身份验证”。
副本集或分片群集的成员可以使用x.509证书进行内部身份验证,而不使用密钥文件。MongoDB支持与安全的TLS / SSL连接一起使用的x.509证书身份验证。
注意
从版本4.0开始,MongoDB在可用TLS 1.1+的系统上禁用对TLS 1.0加密的支持。有关更多详细信息,请参阅禁用TLS 1.0。
用于验证分片群集或副本集的成员资格的成员证书(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
)。