如何配置 ReplicaSet 以支持 TLSSSL
创建根证书
根证书(又名 CA 文件)将用于签署和识别你的证书。要生成它,请运行以下命令。
openssl req -nodes -out ca.pem -new -x509 -keyout ca.key
仔细保留根证书及其密钥,两者都将用于签署你的证书。根证书也可能由你的客户使用。
生成证书请求和私钥
生成证书签名请求(即 CSR)时,**在公共名称(又称 CN)字段中输入节点的确切主机名(或 IP)。其他字段必须具有完全相同的值。**你可能需要修改 / etc / hosts 文件。
以下命令将生成 CSR 文件和 RSA 私钥(4096 位)。
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_1.key -out mongodb_node_1.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_2.key -out mongodb_node_2.csr
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_node_3.key -out mongodb_node_3.csr
你必须为 ReplicaSet 的每个节点生成一个 CSR。请记住,从一个节点到另一个节点的公共名称不同。不要将多个 CSR 基于同一私钥
你现在必须拥有 3 个 CSR 和 3 个私钥。
mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
签署你的证书申请
使用先前生成的 CA 文件(ca.pem)及其私钥(ca.key)通过运行以下命令对每个证书请求进行签名。
openssl x509 -req -in mongodb_node_1.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_1.crt
openssl x509 -req -in mongodb_node_2.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_2.crt
openssl x509 -req -in mongodb_node_3.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_node_3.crt
你必须签署每个 CSR
你现在必须拥有 3 个 CSR,3 个私钥和 3 个自签名证书。MongoDB 将仅使用私钥和证书。
mongodb_node_1.key - mongodb_node_2.key - mongodb_node_3.key
mongodb_node_1.csr - mongodb_node_2.csr - mongodb_node_3.csr
mongodb_node_1.crt - mongodb_node_2.crt - mongodb_node_3.crt
每个证书对应一个节点。请仔细记住你为每个 CSR 提供的 CN /主机名
Concat 每个节点证书及其密钥
运行以下命令将每个节点证书与其密钥连接在一个文件中(MongoDB 要求)。
cat mongodb_node_1.key mongodb_node_1.crt > mongodb_node_1.pem
cat mongodb_node_2.key mongodb_node_2.crt > mongodb_node_2.pem
cat mongodb_node_3.key mongodb_node_3.crt > mongodb_node_3.pem
你现在必须有 3 个 PEM 文件。
mongodb_node_1.pem - mongodb_node_2.pem - mongodb_node_3.pem
部署副本集
我们假设你的 pem 文件位于当前文件夹以及 data / data1,data / data2 和 data / data3 中。
运行以下命令以部署 3 节点 ReplicaSet 侦听端口 27017,27018 和 27019。
mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem
你现在在本地环境中部署了 3 个节点 ReplicaSet,并且所有事务都已加密。如果不使用 TLS,则无法连接到此 ReplicaSet。
部署 ReplicaSet 以实现相互 SSL /相互信任
要强制客户端提供客户端证书(Mutual SSL),你必须在运行实例时添加 CA 文件。
mongod --dbpath data/data_1 --replSet rs0 --port 27017 --sslMode requireSSL --sslPEMKeyFile mongodb_node_1.pem --sslCAFile ca.pem
mongod --dbpath data/data_2 --replSet rs0 --port 27018 --sslMode requireSSL --sslPEMKeyFile mongodb_node_2.pem --sslCAFile ca.pem
mongod --dbpath data/data_3 --replSet rs0 --port 27019 --sslMode requireSSL --sslPEMKeyFile mongodb_node_3.pem --sslCAFile ca.pem
你现在在本地环境中部署了 3 个节点 ReplicaSet,并且所有事务都已加密。如果不使用 TLS 或未提供 CA 信任的客户端证书,则无法连接到此副本集。