面试题答案
一键面试1. 生成证书
- 安装OpenSSL:
- 在Linux系统(如Ubuntu)上,使用命令
sudo apt - get install openssl
安装。 - 在CentOS系统上,使用命令
sudo yum install openssl
安装。
- 在Linux系统(如Ubuntu)上,使用命令
- 生成CA证书:
- 创建CA私钥:
openssl genrsa -out ca.key 4096
- 生成CA证书:
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt -subj "/C = CN/ST = SomeState/L = SomeCity/O = MyCompany/OU = MyDepartment/CN = myCA"
- 创建CA私钥:
- 生成服务器证书:
- 生成服务器私钥:
openssl genrsa -out server.key 4096
- 生成证书签名请求(CSR):
openssl req -new -key server.key -out server.csr -subj "/C = CN/ST = SomeState/L = SomeCity/O = MyCompany/OU = MyDepartment/CN = your_hostname"
- 使用CA证书签署服务器证书:
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650
- 生成服务器私钥:
- 生成客户端证书:
- 生成客户端私钥:
openssl genrsa -out client.key 4096
- 生成客户端CSR:
openssl req -new -key client.key -out client.csr -subj "/C = CN/ST = SomeState/L = SomeCity/O = MyCompany/OU = MyDepartment/CN = client"
- 使用CA证书签署客户端证书:
openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days 3650
- 生成客户端私钥:
2. 配置副本集成员
- 编辑MongoDB配置文件:
- 对于每个副本集成员,编辑其
mongod.conf
文件。 - 添加以下配置启用TLS/SSL:
net: tls: mode: requireTLS certificateKeyFile: /path/to/server.crt.pem CAFile: /path/to/ca.crt.pem
- 重启
mongod
服务使配置生效:- 在Ubuntu上:
sudo systemctl restart mongod
- 在CentOS上:
sudo systemctl restart mongod
- 在Ubuntu上:
- 对于每个副本集成员,编辑其
3. 客户端连接时启用TLS/SSL
- 使用mongo shell连接:
- 提供CA证书路径:
mongo --tls --tlsCAFile /path/to/ca.crt.pem --host <host>:<port>
- 如果需要客户端证书认证:
mongo --tls --tlsCAFile /path/to/ca.crt.pem --tlsCertificateKeyFile /path/to/client.crt.pem --host <host>:<port>
- 提供CA证书路径:
- 使用驱动程序连接:
- Python(pymongo):
from pymongo.mongo_client import MongoClient client = MongoClient( "mongodb://<host>:<port>", tls=True, tlsCAFile="/path/to/ca.crt.pem", tlsCertificateKeyFile="/path/to/client.crt.pem" )
- Java(MongoDB Java Driver):
MongoClientSettings settings = MongoClientSettings.builder() .applyToSslSettings(builder -> { builder.enabled(true) .invalidHostNameAllowed(false) .context(sslContext); }) .build(); MongoClient mongoClient = MongoClients.create(settings);
4. 对副本集性能的影响及应对策略
影响:
- 增加CPU负载:加密和解密操作需要额外的CPU资源,可能导致CPU使用率升高。
- 增加网络延迟:加密后数据量增加,网络传输时间变长,特别是在网络带宽有限的情况下。
应对策略:
- 硬件升级:升级服务器硬件,例如使用更强大的CPU,增加内存等,以应对额外的计算负载。
- 优化网络:确保网络带宽充足,减少网络拥塞,例如升级网络设备、优化网络拓扑等。
- 调整副本集配置:根据实际情况,合理调整副本集成员数量和分布,以平衡负载。例如,将一些读操作分配到延迟较低的副本集成员上。