在資料函式庫安全日益重要的今天,為 MongoDB 副本集組態 TLS/SSL 加密連線是不可或缺的步驟。本提供如何在本地環境佈署一個三節點 MongoDB 副本集,並使用自簽署憑證進行 TLS/SSL 加密設定。首先,需生成根憑證及各節點的憑證請求和私鑰,接著使用根憑證簽署節點憑證請求,最後將私鑰和憑證合併成 PEM 檔案。組態過程中,需注意每個節點的通用名稱必須與其主機名或 IP 位址一致。完成憑證組態後,即可使用 --sslMode requireSSL 和 --sslPEMKeyFile 引數啟動 MongoDB 節點,強制所有連線使用 TLS/SSL 加密。此外,也涵蓋了雙向 SSL 設定,透過 --sslCAFile 引數指定 CA 檔案,確保客戶端也需要提供憑證進行驗證,進一步提升安全性。最後,文章也提供客戶端使用 mongo 命令列工具連線至已啟用 TLS/SSL 的副本集的範例,包含單向和雙向驗證的連線方式。
MongoDB 副本集的 TLS/SSL 組態
如何組態 MongoDB 副本集以支援 TLS/SSL?
本將在本地環境中佈署一個包含 3 個節點的副本集,並使用自簽署憑證。請勿在生產環境中使用自簽署憑證。
連線客戶端到副本集
我們將使用 Mongo Shell 連線到此副本集。
注意:TLS/SSL、PKI(公鑰基礎設施)憑證和憑證授權單位的詳細描述超出了本檔案的範圍。
組態副本集以支援 TLS/SSL
建立根憑證
根憑證(又稱 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
您必須為副本集的每個節點生成一個 CSR。請記住,每個節點的通用名稱不同。不要根據相同的私鑰生成多個 CSR。
現在,您應該擁有 3 個 CSR 和 3 個私鑰:
mongodb_node_1.key、mongodb_node_2.key、mongodb_node_3.keymongodb_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.keymongodb_node_1.csr、mongodb_node_2.csr、mongodb_node_3.csrmongodb_node_1.crt、mongodb_node_2.crt、mongodb_node_3.crt
每個憑證對應一個節點。請仔細記住您為每個 CSR 指定的 CN / 主機名。
將每個節點憑證與其私鑰合併
執行以下命令,將每個節點憑證與其私鑰合併到一個檔案中(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 節點副本集,分別監聽埠 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 個節點的副本集,並且所有交易都被加密。如果不使用 TLS,則無法連線到此副本集。
為雙向 SSL / 雙向信任佈署您的副本集
要強制客戶端提供客戶端憑證(雙向 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
程式碼解析:
上述命令用於啟動 MongoDB 服務,並指定相關的 SSL/TLS 組態引數。
--dbpath:指定資料函式庫檔案的儲存路徑。--replSet:指定副本集的名稱。--port:指定 MongoDB 服務監聽的埠號。--sslMode requireSSL:強制 MongoDB 使用 SSL/TLS 連線。--sslPEMKeyFile:指定包含 SSL/TLS 憑證和私鑰的 PEM 檔案路徑。--sslCAFile:指定用於驗證客戶端憑證的 CA 檔案路徑。
這些組態確保了 MongoDB 服務在啟動時能夠正確載入 SSL/TLS 相關的憑證和私鑰,從而實作加密連線和雙向 SSL/TLS 身份驗證。
MongoDB 安全性與設定
MongoDB 是一種流行的 NoSQL 資料函式庫,其安全性與設定對於確保資料安全和高效運作至關重要。本文將探討 MongoDB 的安全性設定、驗證機制以及如何正確組態 MongoDB。
使用 TLS/SSL 加密 ReplicaSet
在現代資料函式倉管理中,安全性是首要任務。MongoDB 支援使用 TLS/SSL 加密資料傳輸,以保護資料免受竊聽和篡改。要設定一個支援 TLS/SSL 的 ReplicaSet,需要以下步驟:
生成 SSL/TLS 證書: 首先,需要為每個節點生成一個證書。可以使用 OpenSSL 工具生成私鑰和證書籤署請求(CSR),然後使用自己的憑證授權單位(CA)簽署證書。
啟動 ReplicaSet 節點: 使用生成的證書啟動每個 ReplicaSet 節點,並指定
--sslMode requireSSL、--sslPEMKeyFile和--sslCAFile引數。
範例:
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
內容解密:
mongod是 MongoDB 伺服器的啟動命令。--dbpath指定資料儲存路徑。--replSet指定 ReplicaSet 名稱。--port指定服務監聽的埠。--sslMode requireSSL要求所有連線必須使用 SSL/TLS。--sslPEMKeyFile指定伺服器的 PEM 證書檔案。--sslCAFile指定 CA 證書檔案,用於驗證客戶端證書。
連線至支援 TLS/SSL 的 ReplicaSet
要連線到已啟用 TLS/SSL 的 ReplicaSet,可以使用 mongo 命令列工具。若 CA 證書已註冊在系統的信任儲存中,可以直接連線,否則需要提供 CA 證書檔案。
範例:
mongo --ssl --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
或
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019
內容解密:
--ssl啟用 SSL/TLS 連線。--host指定 ReplicaSet 的主機和埠。--sslCAFile提供 CA 證書檔案路徑,用於驗證伺服器證書。
使用客戶端證書進行雙向認證
若 ReplicaSet 需要客戶端提供證書進行雙向認證,則需要生成客戶端證書並簽署。客戶端證書的 Common Name 欄位應包含所有 ReplicaSet 節點的主機名,以逗號分隔,或使用 SubjectAltName 擴充功能。
範例:
openssl req -nodes -newkey rsa:4096 -sha256 -keyout mongodb_client.key -out mongodb_client.csr -config <(
cat <<-EOF
[req]
default_bits = 4096
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn
[ dn ]
CN = .
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = mongo1
DNS.2 = mongo2
DNS.3 = mongo3
EOF
)
openssl x509 -req -in mongodb_client.csr -CA ca.pem -CAkey ca.key -set_serial 00 -out mongodb_client.crt
cat mongodb_client.key mongodb_client.crt > mongodb_client.pem
內容解密:
openssl req生成客戶端私鑰和 CSR。-config指定 OpenSSL 組態,使用 SubjectAltName 擴充功能列出所有主機名。openssl x509 -req簽署客戶端 CSR,生成客戶端證書。cat合併客戶端私鑰和證書成一個 PEM 檔案。
連線時,需提供客戶端證書:
mongo --ssl --sslCAFile ca.pem --host rs0/mongo1:27017,mongo2:27018,mongo3:27019 --sslPEMKeyFile mongodb_client.pem
MongoDB 認證機制
MongoDB 支援多種認證機制,包括 SCRAM-SHA-1、X.509 證書認證、LDAP Proxy 認證和 Kerberos 認證等。選擇適當的認證機制可以增強資料函式庫的安全性。
設定檔與引數
MongoDB 的設定可以透過設定檔或命令列引數進行組態。常見的設定包括系統日誌、網路選項、SSL/TLS 設定等。
範例設定檔內容:
systemLog:
verbosity: 0
quiet: false
net:
port: 27017
bindIp: 0.0.0.0
ssl:
mode: requireSSL
PEMKeyFile: /path/to/mongodb.pem
CAFile: /path/to/ca.pem
內容解密:
systemLog.verbosity設定日誌詳細程度。net.port和net.bindIp設定服務監聽的埠和 IP。net.ssl.mode設定 SSL/TLS 模式,requireSSL表示要求所有連線使用 SSL/TLS。net.ssl.PEMKeyFile和net.ssl.CAFile分別指定伺服器 PEM 證書檔案和 CA 證書檔案。
MongoDB 資料備份與還原技術解析
MongoDB 作為一個流行的 NoSQL 資料函式庫,其資料備份與還原功能對於資料保護至關重要。本文將探討 MongoDB 的備份與還原技術,包括使用 mongodump 和 mongorestore 工具進行資料備份和還原,以及使用 mongoimport 匯入 JSON 和 CSV 格式的資料。
使用 mongodump 進行資料備份
mongodump 是 MongoDB 提供的用於備份資料的工具。它能夠將資料函式庫中的資料匯出為 BSON 格式的檔案,並且可以選擇是否壓縮。以下是一個基本的 mongodump 命令範例:
mongodump --db mydb --gzip --out "mydb.dump.$(date +%F_%R)"
內容解密:
--db mydb指定要備份的資料函式庫名稱為mydb。--gzip表示將備份資料壓縮,以節省儲存空間。--out "mydb.dump.$(date +%F_%R)"指定備份輸出的目錄名稱,並包含時間戳記,以便於管理和區分不同的備份。
使用 mongorestore 進行資料還原
mongorestore 是與 mongodump 相對應的還原工具,能夠將備份的 BSON 資料還原到 MongoDB 資料函式庫中。以下是一個基本的 mongorestore 命令範例:
mongorestore --db mydb mydb.dump.2016-08-27_12:44/mydb --drop --gzip
內容解密:
--db mydb指定要還原到的資料函式庫名稱為mydb。mydb.dump.2016-08-27_12:44/mydb是備份資料的路徑。--drop表示在還原之前先刪除現有的資料函式庫,以避免資料衝突。--gzip表示備份資料是經過壓縮的,需要解壓縮後再還原。
使用 mongoimport 匯入 JSON 資料
mongoimport 是用於將 JSON 或 CSV 格式的資料匯入到 MongoDB 資料函式庫中的工具。以下是一個匯入 JSON 資料的範例:
mongoimport --db test --collection "zips" --drop --type json --host "localhost:47019" --file "c:\Users\yc03ak1\Desktop\zips.json"
內容解密:
--db test指定目標資料函式庫名稱為test。--collection "zips"指定目標集合名稱為zips。--drop表示在匯入之前先刪除現有的集合,以避免資料重複。--type json表示要匯入的檔案格式是 JSON。--host "localhost:47019"指定 MongoDB 的連線地址和埠號。--file "c:\Users\yc03ak1\Desktop\zips.json"指定要匯入的 JSON 檔案路徑。
使用 mongoimport 匯入 CSV 資料
匯入 CSV 資料與匯入 JSON 資料類別似,但需要額外指定欄位名稱或使用 --headerline 引數來指定 CSV 檔案的第一行作為欄位名稱。以下是一個匯入 CSV 資料的範例:
mongoimport --db test --collection "sample" --drop --type csv --headerline --host "localhost:47019" --file "c:\Users\yc03ak1\Desktop\testing.csv"
內容解密:
--type csv表示要匯入的檔案格式是 CSV。--headerline表示使用 CSV 檔案的第一行作為欄位名稱。
MongoDB 版本升級
升級 MongoDB 版本是維護資料函式庫安全性和提升效能的重要步驟。以下是在 Ubuntu 16.04 上使用 apt 將 MongoDB 從 3.2 升級到 3.4 的範例步驟:
- 停止 MongoDB 服務:
sudo service mongod stop - 匯入公鑰:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6 - 新增 MongoDB 3.4 的來源列表:
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list - 更新套件列表:
sudo apt-get update - 升級 MongoDB:
sudo apt-get upgrade - 啟動 MongoDB 服務:
sudo service mongod start
升級完成後,務必檢查 MongoDB 的版本以確認升級成功。