MongoDB SSL 加密和 Spring 的驱动程序

MongoDB SSL 加密和 Spring 的驱动程序

关于 MongoDB 和 SSL 加密在副本集和驱动程序(java 客户端)之间的传输的信息非常有限。有人有设置它的经验吗?希望对节点之间的流量(查询和副本信息)进行加密,而无需使用 stunnel 或其他 SSL 代理方法。

答案1

首先,我要说的是,MongoDB SSL 文档正在编写中,这里的大部分信息最终都会包含在那里,但在此之前.....

我认为 spring 使用的 Java 驱动程序确实支持 SSL。在让 mongoDB 使用 SSL 运行方面,目前有两种选择。首先,您可以成为订阅者并使用订阅者版本 - 内置了 SSL(和 SNMP)支持:

https://www.10gen.com/mongodb-subscriber-edition-download

在撰写本文时,它是一个非常新的产品,仅适用于 Amazon Linux 和 Ubuntu。

由于 MongoDB 是开源的,因此第二种选择是自行构建一个支持 SSL 的 mongoDB 副本。为此,首先我建议遵循常规构建说明,直到成功完成非 SSL 构建:

http://www.mongodb.org/display/DOCS/Building+for+Linux

然后使用传递给 scons 的 --ssl 标志进行构建以启用 SSL。您可能还必须安装所需的 openssl 库,否则配置将无法通过依赖项检查(通常是 libssl 和 libssl-dev)。

完成该步骤后,您就可以开始了。在启用 SSL 的情况下运行 MongoDB 时,请记住,您必须使用 SSL 进行连接一切。所有客户端、shell、驱动程序和 MMS 都必须通过 SSL 连接,否则会失败。为了使用 SSL 启动 mongod,您将需要一个证书、一个密钥、密码以及类似以下选项的内容(以及您想要传递的任何其他选项):

mongod --sslOnNormalPorts --sslPEMKeyFile <pem> --sslPEMKeyPassword <pass>

您也可以在配置文件(通常是 /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() );
} }

相关内容