02.07 MongoDB安全實戰之SSL協議加密

鄧開表同學實戰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

MongoDB安全實戰之SSL協議加密

4) 合併證書和私鑰成PEM文件

cat server.key server.crt > server.pem

5) 驗證服務端證書

Openssl verify -CAfile ca.pem server.pem

MongoDB安全實戰之SSL協議加密

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

MongoDB安全實戰之SSL協議加密

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選項。

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

MongoDB安全實戰之SSL協議加密

上面可以看到,mongo shell連接時,如果不帶任何選項,則報了network error網絡錯誤。這說明MongoDB的客戶端的網絡通信被阻止了。


分享到:


相關文章: