面试题答案
一键面试常见身份验证机制
- MONGODB-CR 机制:
- 这是 MongoDB 早期版本(3.0 之前)使用的身份验证机制。它使用简单的挑战 - 响应机制,基于用户名和密码进行身份验证。服务器向客户端发送一个挑战,客户端使用其密码的散列来响应。
- SCRAM - SHA - 1 机制:
- 从 MongoDB 3.0 开始,SCRAM - SHA - 1 成为默认的身份验证机制。它是一种更安全的基于密码的身份验证机制。SCRAM - SHA - 1 使用加盐的密码哈希,并通过多次消息交互来验证客户端身份,防止密码在传输过程中被截取。
- SCRAM - SHA - 256 机制:
- 从 MongoDB 4.0 开始支持 SCRAM - SHA - 256 机制。它与 SCRAM - SHA - 1 类似,但使用更强的 SHA - 256 哈希算法,提供更高的安全性,适用于对安全性要求更高的场景。
- X.509 证书身份验证:
- 这种机制使用 X.509 数字证书来验证客户端和服务器的身份。证书包含公钥、标识信息(如组织名称、主机名等),并且由受信任的证书颁发机构(CA)签名。客户端和服务器通过交换证书和验证证书链来建立信任关系。
配置方法
- 启用身份验证:
- 在 MongoDB 配置文件(通常是
mongod.conf
)中,添加或修改security
部分,启用身份验证:
security: authorization: enabled
- 在 MongoDB 配置文件(通常是
- 添加用户并设置身份验证机制:
- MONGODB - CR 机制:
- 使用
mongo
shell 连接到 MongoDB 实例(在没有启用身份验证时)。 - 创建用户,例如:
use admin db.createUser( { user: "adminUser", pwd: "password", roles: [ { role: "root", db: "admin" } ] } )
- 使用
- SCRAM - SHA - 1 机制:
- 连接到 MongoDB 实例(无身份验证时)。
- 创建用户:
use admin db.createUser( { user: "adminUser", pwd: "password", roles: [ { role: "root", db: "admin" } ], mechanisms: [ "SCRAM - SHA - 1" ] } )
- SCRAM - SHA - 256 机制:
- 连接到 MongoDB 实例(无身份验证时)。
- 创建用户:
use admin db.createUser( { user: "adminUser", pwd: "password", roles: [ { role: "root", db: "admin" } ], mechanisms: [ "SCRAM - SHA - 256" ] } )
- MONGODB - CR 机制:
- X.509 证书身份验证配置:
- 生成证书:
- 可以使用 OpenSSL 等工具生成 CA 证书、服务器证书和客户端证书。例如,生成 CA 证书:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout ca.key -out ca.csr -subj "/CN=myCA" openssl x509 -req -in ca.csr -days 365 -signkey ca.key -out ca.crt
- 生成服务器证书并由 CA 签名:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout server.key -out server.csr -subj "/CN=mongodb - server" openssl x509 -req -in server.csr -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
- 生成客户端证书并由 CA 签名:
openssl req -newkey rsa:2048 -days 365 -nodes -keyout client.key -out client.csr -subj "/CN=mongodb - client" openssl x509 -req -in client.csr -days 365 -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt
- 配置 MongoDB 服务器:
- 在
mongod.conf
文件中添加或修改以下配置:
net: tls: mode: requireTLS certificateKeyFile: /path/to/server.crt.pem CAFile: /path/to/ca.crt.pem security: authorization: enabled clusterAuthMode: x509
- 在
- 连接客户端:
- 使用
mongo
命令连接时,指定客户端证书、密钥和 CA 证书:
mongo --tls --tlsCertificateKeyFile /path/to/client.crt.pem --tlsCAFile /path/to/ca.crt.pem
- 使用
- 生成证书: