1. MongoDB對SSL的支持情況
MongoDB社區版本不支持SSL,企業版提供對SSL的支持。
MongoDB源代碼中包含SSL的實現,可以自己編譯帶SSL的MongoDB。
MongoDB支持客戶端與mongos、mongod之間的SSL通信,以及replica set和sharded集群成員之間的SSL通信。
MMS支持SSL。
目前Python, Java, Ruby, Node.js, .NET, C, C++驅動都支持SSL。
mongo shell支持SSL。
MongoDB各類工具同樣支持SSL,包括:
- mongodump
- mongoexport
- mongofiles
- mongoimport
- mongooplog
- mongorestore
- mongostat
- mongotop
2. 編譯MongoDB的SSL版本
編譯MongoDB的SSL版本依賴以下軟件:
- build-essential
- scons
- git-core
- libssl-dev
- boost libs
從github上下載MongoDB的源代碼:
git clone git://github.com/mongodb/mongo.git
可以使用git命令切換到想要編譯的版本。
執行以下命令編譯安裝:
scons -j 4 --ssl all
scons -j 4 --ssl --prefix=/usr install
其中-j表示並行編譯,后面緊跟的數字表示線程數。 --prefix表示安裝MongoDB的根目錄。
3. 配置MongoDB使用SSL
要部署啟用SSL的MongoDB首先要有經過CA簽名的有效證書。
可以使用openssl制作證書,具體可以參考http://www.cnblogs.com/chinabrle/p/4238637.html,其中的【6. 使用OPENSSL建立CA和簽發證書】。
要啟用SSL,必須有一個包含公鑰證書和私鑰的.pem文件。
如果已經有了公鑰證書和私鑰文件,使用下面命令將它們合並到一個文件中。
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
1)配置mongos和mongod
有如下參數,可以通過命令參數或配置文件的方式設置。具體可參考http://docs.mongodb.org/manual/tutorial/configure-ssl/。
--sslMode arg 設置SSL的操作模式,有如下模式:
disabled 禁止SSL
allowSSL 服務器之間不使用SSL,客戶端連接同時接收SSL和非SSL連接
preferSSL 服務器之間使用SSL,客戶端連接同時接收SSL和非SSL連接
requireSSL 僅使用SSL
--sslPEMKeyFile arg 指定SSL使用的PEM文件
--sslPEMKeyPassword arg 給出PEM文件的密碼(如果生成秘鑰時設置了密碼)
--sslClusterFile arg 服務器集群內部SSL認證使用的PEM文件
--sslClusterPassword arg 服務器集群內部SSL認證使用的PEM文件的密碼(如果生成秘鑰時設置了密碼)
--sslCAFile arg 指定CA證書文件
--sslCRLFile arg SSL撤銷證書列表
--sslWeakCertificateValidation 允許客戶端連接不提供證書
--sslAllowInvalidHostnames 允許客戶端證書不匹配域名
--sslAllowInvalidCertificates 允許客戶端連接使用無效的證書
--sslFIPSMode 啟動時激活FIPS 140-2模式(http://docs.mongodb.org/manual/tutorial/configure-fips/)
2)配置mongo
有如下參數,可以通過mongo命令參數設置。具體可參考http://docs.mongodb.org/manual/tutorial/configure-ssl-clients/。
--ssl 使用SSL連接
--sslCAFile arg 指定CA證書文件
--sslPEMKeyFile arg 指定SSL使用的PEM文件
--sslPEMKeyPassword arg 給出PEM文件的密碼(如果生成秘鑰時設置了密碼)
--sslCRLFile arg SSL撤銷證書列表
--sslAllowInvalidHostnames 允許服務端證書不匹配域名
--sslAllowInvalidCertificates 允許客戶端連接使用無效的證書
--sslFIPSMode 啟動時激活FIPS 140-2模式(http://docs.mongodb.org/manual/tutorial/configure-fips/)
3)各語言驅動使用SSL的方法請參照幫助文檔。
http://docs.mongodb.org/manual/tutorial/configure-ssl-clients/