2015-06-09 9 views
6

Próbuję skonfigurować ostatnią wersję MongoDB z szyfrowaniem SSL, udało mi się połączyć z powłoki mongo, ale dostaję błąd, gdy łączę się z Javy Klient.Nie można połączyć się z JAVA do zestawu replik SSL Mongo

Works

Mongo Administrator --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt

Nie działa

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

Otrzymuję ten błąd od strony Mongo:

2015-06-09T15: 08: 14.431ZI NETWORK [initandlisten] połączenie akceptowane od 192.168.33.1:38944 # 585 (3 połączenia teraz otwarte) 2015-06-09T15: 08: 14.445ZE SIEĆ [conn585] brak SSL certyfikat dostarczony przez równorzędnego; połączenie odrzucone 2015-06-09T15: 08: 14.445ZI NETWORK [conn585] koniec połączenia 192.168.33.1:38944 (2 połączenia teraz otwarte) 2015-06-09T15: 08: 14.828ZI NETWORK [conn580] koniec połączenia 192.168. 33.13: 39240 (1 gra teraz otwarty)

aw programie klienckim java

información: Wyjątek w wątku monitora podczas łączenia się z serwerem mongo1.xxxx.com:27017 com.mongodb.MongoSocketReadException: Przedwcześnie osiągnięty koniec strumienia pod numerem com.mongodb.connection.So cketStream.read (SocketStream.java:88) w com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers (InternalStreamConnection.java:491) w com.mongodb.connection.InternalStreamConnection.receiveMessage (InternalStreamConnection.java:221) w com.mongodb.connection.CommandHelper.receiveReply (CommandHelper.java:134) w com.mongodb.connection.CommandHelper.receiveCommandResult (CommandHelper.java:121) w com.mongodb.connection.CommandHelper.executeCommand (CommandHelper. java: 32) pod adresem com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription (InternalStreamConnectionInitializer.java:83) na com.mongodb.connection.InternalStreamConnectionInitializer.initialize (InternalStreamConnectionInitializer.java:43) na com.mongodb.connection.InternalStreamConnection.open (InternalStreamConnection.java:115) w com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable .run (DefaultServerMonitor.java:127) w java.lang.Thread.run (Thread.java:745)

tworzenia certyfikatów

mam mongoCA.crt i mongoClient.pem że w orki z powłoką mongo. Następnie chcę zaimportować .pem i .crt do kluczy java

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" 

Co robię źle?

+0

Czy jesteś pewien, że serwer działa z włączonym ssl? Spróbuj połączyć się bez żadnej konfiguracji ssl (przez sterownik cli/shell i java), aby zweryfikować. – evanchooly

+0

Tak, mongo admin --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt działa, ale mongo admin --host mongo1.xxxx.com nie działa. Dziennik mówi, że nie jest możliwe połączenie – gasparms

+2

Dokładnie mój problem. Czy masz rozwiązanie? – Nishant

Odpowiedz

1

Miałem ten sam problem, a dla mnie okazało się, że jest to problem związany ze sposobem, w jaki utworzyłem magazyn kluczy. Zauważam, że używasz tego samego pliku, truststore.ts, zarówno dla magazynu zaufanych certyfikatów, jak i magazynu kluczy. To może zadziałać, ale proponuję użyć oddzielnych plików, aby uniknąć nieporozumień.

Mam już utworzone pliki .pem dla głównego urzędu certyfikacji i dla użytkownika mongo i udało się z powodzeniem wykorzystać je do połączenia z powłoką mongo. Z tych utworzonych truststore.jks i keystore.jks.

Po pierwsze, aby utworzyć truststore.jks Pobiegłem:

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

Dla keystore.jks trzeba oba klucze publiczne i prywatne więc najpierw przekonwertować plik PEM do formatu PKCS12, a następnie zaimportować do 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 
Powiązane problemy