[mongo] [security] 9.3.3 身份验证方式(Authentication Mechanisms)【未完】

网友投稿 981 2022-05-30

注意

从版本4.0开始,MongoDB取消了对不推荐使用的MongoDB质询响应(MongoDB-CR)身份验证机制的支持。

MongoDB支持以下身份验证机制:

SCRAM(默认)

x.509证书认证。

另外,MongoDB Enterprise提供了与许多外部身份验证机制的集成,包括Kerberos和LDAP。有关MongoDB Enterprise支持的其他身份验证机制,请参阅 企业身份验证机制。

默认的身份验证机制

从MongoDB 3.0开始, Salted Challenge Response Authentication Mechanism(SCRAM)是MongoDB的默认身份验证机制。

指定认证机制

要指定要使用的身份验证机制,请authenticationMechanisms  为mongod  和 设置 参数  mongos。

客户端在  db.auth()  方法中指定身份验证机制。对于  mongo  Shell  和  MongoDB  工具,您还可以从命令行指定身份验证机制。

SCRAM

注意

从版本4.0开始,MongoDB删除了对Challenge-Response   (MONGODB-CR)   身份验证机制的支持。

如果您的部署中有用户凭据存储在  MONGODB-CR   架构中,则必须先升级到SCRAM,然后再升级到4.0版。有关升级到SCRAM的信息 SCRAM,请参阅 升级到SCRAM。

SCRAM是MongoDB的默认身份验证机制。SCRAM基于IETF RFC 5802标准,该标准定义了实现挑战响应(challenge-response) 机制的最佳实践,用密码对用户进行身份验证。

使用SCRAM,MongoDB根据用户名、密码和身份验证数据库验证提供的用户凭据。身份验证数据库是创建用户的数据库,与用户名一起用于标识用户。

功能

MongoDB的SCRAM实现提供:

可调整的工作因子(即迭代次数),

每位使用者的随机salts,以及

服务器与客户端相互身份验证。

SCRAM机制

MongoDB支持以下SCRAM机制:

使用SHA-1哈希函数。

要修改其迭代计数SCRAM-SHA-1,请参见 scramIterationCount。

使用SHA-256哈希函数,并要求featureCompatibilityVersion(fcv)设置为4.0。

要修改其迭代计数SCRAM-SHA-256,请参见 scramSHA256IterationCount。

版本4.0中的新功能。

创建或更新SCRAM用户时,您可以指定SCRAM机制,也可以指定服务器还是客户端提取密码。使用SCRAM-SHA-256时,MongoDB需要服务器端密码哈希,即服务器提取密码。有关详细信息,请参见  db.createUser()和  db.updateUser()。

驱动程序支持

要使用SCRAM,如果当前驱动程序版本不支持,则必须升级驱动程序  SCRAM。

支持的最低驱动程序版本  SCRAM  为:

其他信息

博客文章:MongoDB 3.0中基于密码的身份验证的改进:SCRAM解读(第1部分)

博客文章:MongoDB 3.0中基于密码的身份验证的改进:SCRAM解读(第2部分)

x.509

MongoDB支持x.509证书身份验证,用于客户端身份验证以及副本集和分片群集成员的内部身份验证。

x.509证书身份验证需要安全的TLS / SSL连接。

注意

从版本4.0开始,MongoDB在可用TLS 1.1+的系统上禁用对TLS 1.0加密的支持。有关更多详细信息,请参阅禁用TLS 1.0。

证书颁发机构

对于生产用途,您的MongoDB部署应使用由单个证书颁发机构生成和签名的有效证书。您或您的组织可以生成和维护独立的证书颁发机构,或者使用第三方TLS / SSL供应商生成的证书。获取和管理证书超出了本文档的范围。

客户端x.509证书

若要向服务器进行身份验证,客户端可以使用x.509证书代替用户名和密码。

客户证书要求

客户端证书必须具有以下属性:

证书颁发机构(CA)必须同时为客户端和服务器颁发证书。

客户端证书必须包含以下字段:

keyUsage = digitalSignature extendedKeyUsage = clientAuth

每个唯一的MongoDB用户必须具有唯一的证书。

客户端X.509证书的主题,其中包含了专有名称(DN),必须区别 成员X.509证书。

客户端证书中的组织(O),组织单位(OU)或域组件(DC)属性至少必须与net.tls.clusterFile和 net.tls.certificateKeyFile服务器证书中的属性不同 。

如果MongoDB部署设置了tlsX509ClusterAuthDNOverride(从MongoDB 4.2开始可用),则客户端x.509证书的主题也必须与此值不同。

警告

如果客户端x.509证书的主题与成员x.509证书具有相同的O、OU和DC组合(如果设置了tlsX509ClusterAuthDNOverride),则会拒绝客户端连接。只有群集成员x509证书应使用相同的O、OU和DC组合,因为这将授予完全权限。

x.509证书一定不可 过期。

在4.4版本有改变:

如果提供的x.509证书在mongod/mongos主机系统时间的30天内过期,mongod/mongos会在连接时记录警告。有关详细信息,请参阅x.509 Certificates Nearing Expiry Trigger Warnings。

MongoDB的用户和  $external  数据库

要使用客户端证书进行身份验证,必须首先将客户端证书中的subject的值添加MongoDB用户。每个唯一的x.509客户端证书对应于一个MongoDB用户;即,不能使用单个客户端证书对多个MongoDB用户进行身份验证。

在$external数据库中添加用户;即 认证数据库是$external数据库

在版本3.6.3中更改:要与$external身份验证用户(即Kerberos,LDAP,x.509用户)一起使用会话,用户名不能大于10k字节。

验证

要使用x.509客户端证书进行连接和身份验证,请执行以下操作:

对于MongoDB 4.2或更高版本,请为客户端包括以下选项:

--tls(或不建议使用的--ssl选项)

--tlsCertificateKeyFile (或不建议使用的--sslPEMKeyFile选项)

--tlsCertificateKeyFilePassword (或不建议使用的--sslPEMKeyPassword选项)如果证书密钥文件已加密

--authenticationDatabase '$external'

--authenticationMechanism MONGODB-X509

对于MongoDB 4.0和更早版本,为客户端包括以下选项:

--ssl

--sslPEMKeyFile

--sslPEMKeyPassword如果--sslPEMKeyFile加密,则为选项。

--authenticationDatabase '$external'

--authenticationMechanism MONGODB-X509

您还可以先建立TLS / SSL连接,然后db.auth()在$external数据库中使用 它进行身份验证。

有关两种情况的示例,请参阅使用x.509证书对客户端进行身份验证 中的使用x.509证书进行身份验证(使用tls选项)部分。

成员x.509证书  (Member x.509 Certificates)

对于内部身份验证,分片群集和副本集的成员可以使用x.509证书代替使用SCRAM身份验证机制的 密钥文件。

成员证书要求

用于验证分片群集或副本集成员身份的成员证书(net.tls.clusterFile,如果指定,则为net.tls.certificateKeyFile)必须具有以下属性:

单个证书颁发机构(CA)必须为分片群集或副本集的成员颁发所有x.509证书。

在成员证书的主题中找到的可分辨名称(DN)必须为以下至少一个属性指定非空值:组织(O)、组织单位(OU)或域组件(DC)。

组织属性(O's)、组织单元属性(OU's)和域组件(DC's)必须与来自这两个域的属性匹配net.tls.clusterFile文件以及net.tls.certificateKey文件其他集群成员的证书(或tlsX509ClusterAuthDNOverride值,如果已设置)。

要匹配,证书必须匹配这些属性的所有规范,甚至这些属性的非规范。属性的顺序并不重要。   在下面的示例中,这两个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)之一必须与服务器的主机名匹配,该主机名由集群的其他成员使用。从MongoDB 4.2开始,在执行SAN比较时,MongoDB支持DNS名称或IP地址的比较。在以前的版本中,MongoDB仅支持DNS名称的比较。

例如,群集的证书可以具有以下主题:

subject= CN=,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=,OU=Dept1,O=MongoDB,ST=NY,C=US subject= CN=,OU=Dept1,O=MongoDB,ST=NY,C=US

如果证书包含扩展密钥用法(extendedKeyUsage)设置,则该值必须包含clientAuth(“ TLS Web客户端身份验证”)。

extendedKeyUsage = clientAuth

您还可以使用不包含扩展密钥用法(EKU)的证书。

x.509证书不得过期。

在4.4版本改变:如果提供的x.509证书在mongod/mongos主机系统时间的30天内过期,mongod/mongos会在连接时记录警告。有关详细信息,请参阅x.509证书接近到期触发警告。

MongoDB成员身份验证配置

除了适用于部署的任何TLS/SSL配置之外,还包括以下配置,以便为副本集(即mongod实例)或分片集群(即mongod和mongos实例)的每个成员指定x.509进行内部身份验证:

Security.clusterAuthMode或--clusterAuthMode设置为x509

net.tls.clusterFile或--tlsClusterFile(在MongoDB 4.2中都是新功能)

[mongo] [security] 9.3.3 身份验证方式(Authentication Mechanisms)【未完】

但是,如果未指定群集文件,则成员可以使用中指定的证书密钥文件net.tls.certificateKey文件或者--tlsCertificateKeyFile(都是MongoDB 4.2中新增的),用于成员身份验证。mongod(和mongos)实例使用此证书密钥文件向客户端证明其身份,但也可以用于成员身份验证。要同时用于客户端身份验证和成员身份验证,证书必须:

省略extendedKeyUsage或

指定extendedKeyUsage值

注意

尽管仍然可用,net.ssl.clusterFile文件(以及相应的--sslClusterFile)和net.ssl.PEMKeyFile文件(以及相应的--sslPEMKeyFile)在MongoDB 4.2中被弃用。

对于使用MongoDB 4.0版及更早版本的部署,请使用net.ssl.clusterFile文件(或相应的--sslClusterFile)和net.ssl.PEMKeyFile文件(或相应的--sslPEMKeyFile)。

x.509证书不得过期。

在4.4版本改变:如果提供的x.509证书在mongod/mongos主机系统时间的30天内过期,mongod/mongos会在连接时记录警告。有关详细信息,请参阅x.509证书接近到期触发警告。

MongoDB 云数据库 GaussDB(for Mongo) 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【RTOS】TencentOS tiny 移植到STM32F429(基于CubeMX)
下一篇:HTML中常见标签详解
相关文章