有关副本集和驱动程序(Java客户端)之间传输的MongoDB和SSLencryption信息非常有限。 任何人有任何经验设置? 希望在不需要使用stunnel或其他SSL代理方法的情况下对节点之间的stream量(查询和副本信息)进行encryption。
首先,让我说,MongoDB SSL文档正在进行工作,这里的大部分信息将最终包含在那里,但在此之前…..
我相信spring使用的Java驱动程序确实支持SSL。 在使用SSL运行mongoDB方面,目前有两种select。 首先,您可以成为订阅者,并使用订阅者版本 – 具有内置的SSL(和SNMP)支持:
https://www.10gen.com/mongodb-subscriber-edition-download
在撰写本文时,这是一个新的产品,仅适用于Amazon Linux和Ubuntu。
第二个选项,由于MongoDB是开源的,所以你需要为自己构build一个支持SSL的mongoDB。 为此,首先我会build议遵循一般的构build指令,直到您获得非SSL构build成功为止:
http://www.mongodb.org/display/DOCS/Building+for+Linux
然后使用传递给scons的–ssl标志来构buildSSL。 你也可能不得不安装所需的openssl库或configuration将失败依赖关系检查(通常是libssl和libssl-dev)。
一旦你完成这一步,你应该很好去。 在启用SSL的情况下运行MongoDB时,请记住您必须与SSL连接。 所有的客户端,shell,驱动程序和彩信都将通过SSL连接或失败。 为了使用SSL启动mongod,您将需要一个证书,一个密钥,密码以及类似这些选项的内容(除了您想要传递的其他选项外):
mongod --sslOnNormalPorts --sslPEMKeyFile <pem> --sslPEMKeyPassword <pass>
您也可以在configuration文件(通常是/etc/mongodb.conf)中指定这些选项,如下所示:
sslOnNormalPorts = true sslPEMKeyFile = /etc/ssl/mongodb.pem sslPEMKeyPassword = pass
为了简单的使用shell
mongo --ssl --host <hostname> --port <port>
最后,你提到使用Java,下面是一个“sslApp.java”类文件的例子:
import com.mongodb.*; import javax.net.ssl.SSLContext; public class sslApp { public static void main(String args[]) throws Exception { MongoOptions o = new MongoOptions(); o.socketFactory = SSLSocketFactory.getDefault(); Mongo m = new Mongo( "localhost" , o ); DB db = m.getDB( "test" ); DBCollection c = db.getCollection( "foo" ); System.out.println( c.findOne() ); } }