在本页面
MongoDB支持用于安全TLS / SSL连接的 x.509证书身份验证 。分片的群集成员和副本集成员可以使用x.509证书来验证其加入群集或副本集的成员身份,而不是使用 密钥文件。成员身份验证是一个内部过程。
注意
从版本4.0开始,MongoDB在可用TLS 1.1+的系统上禁用对TLS 1.0加密的支持。有关更多详细信息,请参阅禁用TLS 1.0。
启用内部身份验证也将启用 基于角色的访问控制。客户端必须以用户身份进行身份验证才能连接并在部署中执行操作。
重要
TLS / SSL,PKI(公钥基础结构)证书(尤其是x.509证书)和证书颁发机构的完整描述不在本文档的范围之内。本教程假定您具有TLS / SSL的先验知识以及对有效x.509证书的访问权限。
注意
您必须具有有效的x.509证书。
从MongoDB 4.0开始,如果在使用x.509身份验证时指定
--sslAllowInvalidCertificates
或
(或在MongoDB 4.2中为别名或
),则无效的证书仅足以建立TLS / SSL连接,但不足以进行身份验证。net.ssl.allowInvalidCertificates: true
--tlsAllowInvalidateCertificates
net.tls.allowInvalidCertificates: true
用于验证分片群集或副本集的成员资格的成员证书(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)的证书。
在滚动升级过程之外,副本集或分片群集的每个组件都应使用相同的
--clusterAuthMode
设置,以确保它可以安全地连接到部署中的所有其他组件。
对于分片群集部署,这包括全部mongod
或mongos
实例。
注意
开始在MongoDB中3.6,mongod
并mongos
绑定默认为localhost。如果部署的成员在不同的主机上运行,或者希望远程客户端连接到部署,则必须指定--bind_ip
或
net.bindIp
。有关更多信息,请参见
Localhost绑定兼容性更改。
tls
)¶注意
本节中的过程使用ssl
设置/选项。有关使用其tls
别名的过程(在MongoDB 4.2中可用),请参阅使用命令行选项(tls)。
的tls
设置/选项提供了相同的功能性ssl
选项,因为MongoDB中始终支持TLS 1.0和更高。
重要
要使用x.509身份验证,--tlsCAFile
或者net.tls.CAFile
必须指定,除非使用--tlsCertificateSelector
或
--net.tls.certificateSelector
。或者,如果使用ssl
别名,
--sslCAFile
或net.ssl.CAFile
必须指定,除非使用
--sslCertificateSelector
或net.ssl.certificateSelector
。
包括您的特定配置所需的所有其他选项,TLS / SSL或其他。对于
重要
要使用x.509身份验证,--tlsCAFile
或者net.tls.CAFile
必须指定,除非使用--tlsCertificateSelector
或
--net.tls.certificateSelector
。或者,如果使用ssl
别名,
--sslCAFile
或net.ssl.CAFile
必须指定,除非使用
--sslCertificateSelector
或net.ssl.certificateSelector
。
包括您的特定配置所需的所有其他选项,TLS / SSL或其他。
有关更多信息,请参阅为TLS / SSL配置mongod和mongos。
ssl
)¶注意
本节中的过程使用ssl
设置/选项。有关使用其tls
别名的过程(在MongoDB 4.2中可用),请参阅使用命令行选项(tls)。
的tls
设置/选项提供了相同的功能性ssl
选项,因为MongoDB中始终支持TLS 1.0和更高。
要为内部集群成员身份验证指定x.509证书,请附加其他TLS / SSL选项
--clusterAuthMode
和--sslClusterFile
,如以下示例中的副本集成员所示:
重要
要使用x.509身份验证,--tlsCAFile
或者net.tls.CAFile
必须指定,除非使用--tlsCertificateSelector
或
--net.tls.certificateSelector
。或者,如果使用ssl
别名,
--sslCAFile
或net.ssl.CAFile
必须指定,除非使用
--sslCertificateSelector
或net.ssl.certificateSelector
。
包括您的特定配置所需的所有其他选项,TLS / SSL或其他。
重要
要使用x.509身份验证,--tlsCAFile
或者net.tls.CAFile
必须指定,除非使用--tlsCertificateSelector
或
--net.tls.certificateSelector
。或者,如果使用ssl
别名,
--sslCAFile
或net.ssl.CAFile
必须指定,除非使用
--sslCertificateSelector
或net.ssl.certificateSelector
。
包括您的特定配置所需的所有其他选项,TLS / SSL或其他。
有关更多信息,请参阅为TLS / SSL配置mongod和mongos。
要将密钥文件内部身份验证升级到x.509内部身份验证,请参阅从密钥文件身份验证 升级到x.509身份验证。
若要将证书滚动更新为具有不同证书的新证书DN
,请参阅
滚动更新包含新DN的x.509群集证书。