如何配置 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 信任的客戶端證書,則無法連線到此副本集。