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