Существует очень ограниченная информация о 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() );
} }