使用 X.509 证书对自管理部署上的客户端进行身份验证
以下过程将为独立运行的 mongod
实例上的客户端身份验证设置 x.509 证书身份验证。 这也称为相互 TLS 或 mTLS。
要对副本集或分片集群使用 x.509 身份验证,请参阅使用 x.509 证书对自管理 MongoDB 进行成员身份验证。
先决条件
TLS/SSL、PKI(公钥基础设施)证书(特别是 X.509 证书)和证书颁发机构的完整说明已超出本文档的范围。本教程假定您已了解 TLS/SSL 并可访问权限有效的 X.509 证书。
证书颁发机构
对于生产用途,MongoDB 部署应使用由证书颁发机构生成和签名的有效证书。您或您的组织可以生成并维护独立的证书颁发机构,或使用第三方 TLS 供应商生成的证书。获取和管理证书超出了本文档的范围。
要使用 X.509身份验证,必须指定 --tlsCAFile
或 net.tls.CAFile
,除非您使用 --tlsCertificateSelector
或 --net.tls.certificateSelector
。
客户端 X.509 证书
您必须拥有有效的 X.509 证书。客户端X.509 证书必须满足客户端证书要求。
如果您指定 --tlsAllowInvalidCertificates
或 net.tls.allowInvalidCertificates: true
,则无效证书仅足以建立 TLS 连接,但不足以进行身份验证。
步骤
使用 X.509 身份验证进行部署
您可以从命令行为 X.509身份验证配置mongod
实例。
要配置独立运行的 mongod
实例,请运行以下命令:
mongod --tlsMode requireTLS \ --tlsCertificateKeyFile <path to TLS/SSL certificate and key PEM file> \ --tlsCAFile <path to root CA PEM file> --bind_ip <hostnames>
根据配置要求包括其他选项。
X.509 配置需要:
选项 | 注意 |
---|---|
指定 | |
指定要提供给客户端的实例的 X.509 证书。 | |
指定证书颁发机构文件以验证该实例所提供的证书。 |
要为副本集或分片的集群设立X.509身份验证,请参阅使用 X.509 证书在自管理MongoDB中进行成员身份验证。
添加 X.509 证书 subject
作为用户
要使用客户端证书进行身份验证,必须首先以MongoDB用户身份将客户端证书中的 subject
值添加到 $external
数据库中。每个唯一的 X.509客户端证书对应一个MongoDB用户。您不能使用单个客户端证书对多个MongoDB用户进行身份验证。
注意
用户名要求
要将 客户端会话和因果一致性保证 与
$external
身份验证用户(Kerberos、LDAP 或 X.509 用户)结合使用,用户名不能大于 10k 字节。中的 RDN
subject
string 必须与 RFC2253 标准。
您可以使用以下命令从客户端证书检索
RFC2253
格式的subject
:openssl x509 -in <pathToClientPEM> -inform PEM -subject -nameopt RFC2253 此命令将返回
subject
字符串和证书:subject= CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry -----BEGIN CERTIFICATE----- # ... -----END CERTIFICATE----- 添加符合
RFC2253
的subject
值作为用户。根据需要省略空格。以下示例添加了一个用户,并为该用户授予
test
数据库中的readWrite
角色以及userAdminAnyDatabase
角色:db.getSiblingDB("$external").runCommand( { createUser: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", roles: [ { role: "readWrite", db: "test" }, { role: "userAdminAnyDatabase", db: "admin" } ], writeConcern: { w: "majority" , wtimeout: 5000 } } ) 有关添加具有角色的用户的详细信息,请参阅管理自管理部署中的用户和角色。
使用 X.509 证书进行身份验证
将 x.509 客户端证书主题添加为相应的 MongoDB 用户后,您可以使用该客户端证书进行身份验证:
要在连接过程中进行身份验证,请运行以下命令:
mongosh --tls --tlsCertificateKeyFile <path to client PEM file> \ --tlsCAFile <path to root CA PEM file> \ --authenticationDatabase '$external' \ --authenticationMechanism MONGODB-X509
选项 | 注意 |
---|---|
指定客户端的 X.509文件。 | |
指定证书颁发机构文件,以验证 | |
指定 | |
指定 |
后续步骤
要对副本集或分片集群使用 x.509 身份验证,请参阅使用 x.509 证书对自管理 MongoDB 进行成员身份验证。