Criptografia SSL do MongoDB e o Spring's Driver

4

Há informações muito limitadas sobre o MongoDB e a criptografia SSL para o transporte entre conjuntos de réplicas e drivers (clientes java). Alguém tem alguma experiência em configurar isso? Procurando ter tráfego (consultas e informações de réplica) entre nós criptografados sem precisar usar stunnel ou algum outro método de proxy SSL.

    
por Nick Huanca 26.03.2012 / 19:24

1 resposta

3

Primeiro, deixe-me dizer que os documentos SSL do MongoDB estão sendo trabalhados, a maioria das informações aqui serão incluídas eventualmente, mas até lá .....

O driver Java, que acredito que o Spring usa, suporta SSL. Em termos de obter o mongoDB rodando com SSL, existem atualmente duas opções. Primeiro, você pode se tornar um assinante e usar a edição do assinante - que tem suporte a SSL (e SNMP) embutido:

link

Ao escrever isso, é uma oferta muito nova e está disponível apenas para o Amazon Linux e o Ubuntu.

A segunda opção, graças ao fato do MongoDB ser open source, é construir uma cópia do mongoDB com suporte a SSL. Para fazer isso, primeiro eu recomendaria seguir as instruções gerais de criação até ter sucesso com uma compilação não SSL:

link

Em seguida, construa com o sinalizador --ssl passado para scons para ativar o SSL. Você provavelmente também terá que instalar as bibliotecas openssl necessárias ou a verificação configure as dependências com falha (geralmente libssl e libssl-dev).

Depois de concluir essa etapa, você deve estar pronto para ir. Ao executar o MongoDB com o SSL ativado, tenha em mente que você precisa se conectar com o SSL para tudo . Todos os clientes, o shell, o driver e o MMS terão que se conectar via SSL ou falhar. Para iniciar o mongod com SSL, você precisará de um certificado, uma chave, a senha e algo parecido com essas opções (além de outras opções que deseja passar):

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

Você também pode especificar essa opção em um arquivo de configuração (geralmente /etc/mongodb.conf) assim:

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

Para o shell, simplesmente use

mongo --ssl --host <hostname> --port <port>

Finalmente, você mencionou o uso de Java, aqui está um exemplo do arquivo de classe "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() );
} }
    
por 04.04.2012 / 12:35