Назад | Перейти на главную страницу

SSL-шифрование MongoDB и драйвер Spring

Существует очень ограниченная информация о MongoDB и SSL-шифровании для транспорта между наборами реплик и драйверами (java-клиентами). У кого-нибудь есть опыт настройки этого? Требуется, чтобы трафик (запросы и информация о репликах) между узлами был зашифрован без использования stunnel или какого-либо другого метода прокси SSL.

Во-первых, позвольте мне сказать, что документация MongoDB SSL находится в стадии разработки, большая часть информации здесь в конечном итоге будет включена туда, но до тех пор ...

Драйвер Java, который, как мне кажется, использует Spring, действительно поддерживает SSL. Что касается запуска mongoDB с SSL, в настоящее время есть два варианта. Во-первых, вы можете стать подписчиком и использовать выпуск для подписчика, в который встроена поддержка SSL (и SNMP):

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

На момент написания этой статьи это очень новое предложение, доступное только для Amazon Linux и Ubuntu.

Второй вариант, благодаря тому, что MongoDB имеет открытый исходный код, - это создать себе копию mongoDB с поддержкой SSL. Для этого сначала я бы рекомендовал следовать общим инструкциям по сборке, пока вы не добьетесь успеха с сборкой без SSL:

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

Затем выполните сборку с флагом --ssl, переданным scons, чтобы включить SSL. Вам также, вероятно, придется установить необходимые библиотеки openssl, иначе конфигурация не сможет выполнить проверку зависимостей (обычно это libssl и libssl-dev).

После того, как вы завершите этот шаг, все будет в порядке. При запуске MongoDB с включенным SSL имейте в виду, что вам необходимо подключиться с помощью SSL для все. Все клиенты, оболочка, драйвер и MMS должны будут подключиться через SSL, иначе произойдет сбой. Чтобы запустить mongod с SSL, вам понадобятся сертификат, ключ, пароль и что-то вроде этих параметров (в дополнение к любым другим параметрам, которые вы хотите передать):

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

Вы также можете указать эту опцию в конфигурационном файле (обычно /etc/mongodb.conf) следующим образом:

sslOnNormalPorts = true
sslPEMKeyFile = /etc/ssl/mongodb.pem
sslPEMKeyPassword = pass

Для оболочки просто используйте

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() );
} }