鄧開表同學實戰MongoDB系列文章,非常不錯,贊!大力推薦!
本文主要講述MongoDB的SSL協議加密的使用和配置的實戰經驗,非常值得一看。
前面系列文章:
MongoDB安全實戰之Kerberos認證
MongoDB Compass--MongoDB DBA必備的管理工具
MongoDB安全實戰之審計
1、前言
加密就是將普通文本——所謂“明文”——轉變為無法直接閱讀的形式——所謂“密文”的過程。而要實現加密,以下兩者缺一不可:加密算法和加密密鑰(key)。抽象地說,加密的過程就是以明文作為加密算法的輸入,同時結合預先設置的密鑰,輸出所期待的密文。
2 傳輸層加密
MongoDB支持TLS/SSL(傳輸層安全性/安全套接字層)協議加密所有的MongoDB的網絡通信。TLS/SSL確保了MongoDB的網絡通信僅可讀由預定的客戶端。
2.1 TLS/SSL協議
在今天SSL協議上,公開密鑰和對稱密鑰加密結合使用。SSL是Internet上數據安全傳輸事實上的標準加密機制。MongoDB使用OpenSSL庫來實現TLS/SSL協議加密。MongoDB的SSL加密,只允許使用強大的SSL密碼至少128位密鑰長度對應所有連接。
2.2 證書
證書頒發機構
在生產環境下,MongoDB應使用有效證書的生成和由一個單一的認證機構簽名。
生成pem文件
在使用SSL之前,必須有一個包含公鑰證書及其相關私鑰的PEM文件。
MongoDB可以使用任何有效的SSL證書由證書頒發機構頒發的證書或自簽名證書。如果使用自簽名證書,雖然通信通道將被加密,但是不會驗證服務器標識。雖然這種情況會阻止竊聽的連接,它會讓容易受到中間人攻擊。使用由受信任的證書頒發機構簽署的證書將允許MongoDB驅動驗證服務器的身份。
2.2.1 生成ca.pem及privkey.pem文件
cd /etc/ssl
openssl req -out ca.pem -new -x509 -days 3650 -subj “/C=CN/ST=/BeiJing/O=bigdata/CN=root/[email protected]”
2.2.2生成服務端PEM文件:
1) 使用RSA加密算法生成一個服務端私鑰文件
openssl genrsa -out server.key 2048
2) 根據密鑰文件生成一個證書申請文件
openssl req -key server.key -new -out server.req -subj “/C=CN/ST=BeiJing/O=bigdata/CN=server1/CN=localhost/[email protected]”
3) 根據證書申請文件生成CA的服務端證書文件
openssl x509 -req -in server.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out server.crt -days 3650
4) 合併證書和私鑰成PEM文件
cat server.key server.crt > server.pem
5) 驗證服務端證書
Openssl verify -CAfile ca.pem server.pem
2.2.3 生成客戶端PEM文件:
1) 使用RSA加密算法生成一個客戶端私鑰文件
openssl genrsa -out client.key 2048
2) 根據密鑰文件生成一個證書申請文件
openssl req -key client.key -new -out client.req -subj "/C=CN/ST=BeiJing/O=bigdata/CN=client1/[email protected]"
3) 根據證書申請文件生成CA的客戶端證書文件
openssl x509 -req -in client.req -CA ca.pem -CAkey privkey.pem -CAserial file.srl -out client.crt -days 3650
4) 合併證書及私鑰文件成PEM文件
cat client.key client.crt > client.pem
5) 驗證客戶端證書
openssl verify -CAfile ca.pem client.pem
3 設置mongod服務的SSL支持
在MongoDB部署使用SSL時,需要配置以下啟動項:
·--sslMode 設置成requiressl。此設置限制每個服務器只使用SSL加密連接。你也可以指定的值allowssl或preferssl建立混合模式使用SSL端口。
·--sslPEMKeyFile 使用包含SSL證書和密鑰的PEM文件。
語法格式:
mongod --sslMode requireSSL --sslPEMKeyFile /etc/ssl/mongodb.pem
或者,在配置文件中添加以下配置:
net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem
連接mongod服務和mongos路由服務器使用SSL,Mongo shell和MongoDB的工具必須包括SSL選項。
4 啟動mongod服務並連接mongo shell
mongod --config=/etc/mongod.conf
mongo --ssl --host localhost --sslPEMKeyFile /etc/ssl/client.pem --sslCAFile /etc/ssl/ca.pem
上面可以看到,mongo shell連接時,如果不帶任何選項,則報了network error網絡錯誤。這說明MongoDB的客戶端的網絡通信被阻止了。
閱讀更多 大數據和雲計算技術 的文章