2015-06-09 19 views
6

Sto provando a configurare l'ultima versione di MongoDB con crittografia SSL, sono stato in grado di connettermi dalla shell mongo ma sto ricevendo un errore quando mi connetto da un Java Cliente.Impossibile connettersi da JAVA a Mongo SSL Replica Set

Opere

mongo amministratore --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt

Non funziona

public static void main(String args[]){ 
    System.setProperty("javax.net.ssl.trustStore","/home/gasparms/truststore.ts"); 
    System.setProperty("javax.net.ssl.trustStorePassword", "mypasswd"); 

    System.setProperty("javax.net.ssl.keyStore", "/home/gasparms/truststore.ts"); 
    System.setProperty("javax.net.ssl.keyStorePassword", "mypasswd"); 
    System.setProperty("javax.security.auth.useSubjectCredsOnly","false"); 

    MongoClientOptions options = MongoClientOptions.builder().sslEnabled(true) 
    .build(); 

    MongoClient mongoClient = new MongoClient("mongo1.xxxx.com",options); 
    System.out.println(mongoClient.getDatabaseNames()); 
} 

Ho ricevuto questo errore dal lato Mongo:

2015-06-09T15: 08: 14.431ZI NETWORK collegamento [initandlisten] accettato da 192.168.33.1:38944 # 585 (3 connessioni ora aperte) 2015-06-09T15: 08: 14.445ZE NETWORK [conn585] no SSL certificato fornito da pari; connessione rifiutata 2015-06-09T15: 08: 14.445ZI RETE [conn585] connessione finale 192.168.33.1:38944 (2 connessioni ora aperte) 2015-06-09T15: 08: 14.828ZI NETWORK [conn580] connessione finale 192.168. 33.13: 39240 (1 collegamento ora aperto)

in programma client java

INFORMACIÓN: eccezione nel thread di monitoraggio durante la connessione al server mongo1.xxxx.com:27017 com.mongodb.MongoSocketReadException: Raggiunta prematuramente la fine del flusso a com.mongodb.connection.So cketStream.read (SocketStream.java:88) a com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers (InternalStreamConnection.java:491) a com.mongodb.connection.InternalStreamConnection.receiveMessage (InternalStreamConnection.java:221) a com.mongodb.connection.CommandHelper.receiveReply (CommandHelper.java:134) a com.mongodb.connection.CommandHelper.receiveCommandResult (CommandHelper.java:121) a com.mongodb.connection.CommandHelper.executeCommand (CommandHelper. java: 32) a com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription (InternalStreamConnectionInitializer.java:83) a com.mongodb.connection.InternalStreamConnectionInitializer.initialize (InternalStreamConnectionInitializer.java:43) a com.mongodb.connection.InternalStreamConnection.open (InternalStreamConnection.java:115) a com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable .run (DefaultServerMonitor.java:127) a java.lang.Thread.run (Thread.java:745)

creazione di certificati

ho mongoCA.crt e mongoClient.pem che w orchi con guscio di mongo. Poi, voglio importare .pem e .crt ad un java chiavi

openssl x509 -outform der -in certificate.pem -out certificate.der 
keytool -import -alias MongoDB-Client -file certificate.der -keystore truststore.ts -noprompt -storepass "mypasswd" 
keytool -import -alias "MongoDB-CA" -file mongoCA.crt -keystore truststore.ts -noprompt -storepass "mypasswd" 

Quello che sto facendo di sbagliato?

+0

Sei sicuro che il server sia in esecuzione con ssl abilitato? Prova a connetterti senza alcuna configurazione di ssl (tramite cli/shell e il driver java) per verificare. – evanchooly

+0

Sì, admin mongo --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt funziona, ma mongo admin --host mongo1.xxxx.com no. Log dice che non è possibile collegare – gasparms

+2

Esattamente il mio problema. Hai trovato una soluzione? – Nishant

risposta

1

Ho avuto lo stesso problema e per me è risultato essere un problema con il modo in cui ho creato il keystore. Ho notato che stai utilizzando lo stesso file, truststore.ts, sia per il truststore che per il keystore. Questo può funzionare, ma suggerirei di utilizzare file separati per evitare confusione.

Avevo già creato file .pem per la CA radice e per l'utente mongo, ed ero in grado di usarli con successo per connettermi con la shell mongo. Da quelli che ho creato truststore.jks e keystore.jks.

In primo luogo, per creare truststore.jks mi sono imbattuto:

keytool -import -alias root -storepass mypass -keystore truststore.jks -file rootca.pem -noprompt 

Per keystore.jks necessari sia le chiavi pubbliche e private così prima convertire il file PEM in formato PKCS12, e quindi importare ad un JKS:

openssl pkcs12 -export -out myuser.pkcs12 -in myuser.pem -password pass:mypass 
keytool -importkeystore -srckeystore myuser.pkcs12 -srcstoretype PKCS12 -destkeystore keystore.jks -deststoretype JKS -deststorepass mypass -srcstorepass mypass 
Problemi correlati