2015-06-09 26 views
6

SSL şifrelemesiyle MongoDB'nin son sürümünü kurmaya çalışıyorum, mongo kabuğundan bağlanabildim ama Java'dan bağlandığımda hata alıyorum Müşteri.JAVA'dan Mongo'ya bağlanılamıyor. Çoğaltma Seti

İşleri

Mongo yönetici --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt

Çalışmaz

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

:

Ben Mongo taraftan bu hatayı alıyorum 210

2015-06-09T15: 08: 14.431ZI AĞ [initandlisten] bağlantı kabul edildi 192.168.33.1:38944 # 585 (3 şimdi yeni bağlantı) 2015-06-09T15: 08: 14.445ZE AĞ [conn585] SSL eş tarafından sağlanan sertifikası; bağlantı reddedildi 2015-06-09T15: 08: 14.445ZI AĞ [conn585] uç bağlantısı 192.168.33.1:38944 (2 bağlantı şimdi açık) 2015-06-09T15: 08: 14.828ZI AĞ [conn580] uç bağlantısı 192.168. 33.13: 39240 (1 bağlantı şimdi açık)

ve java istemci programında

informacion: monitör İş parçacığı sunucusuna mongo1.xxxx.com:27017 com.mongodb.MongoSocketReadException bağlanırken: com.mongodb.connection.So adresindeki akışın sonuna kadar ulaşılamadı. de cketStream.read com.mongodb.connection.InternalStreamConnection.receiveMessage (InternalStreamConnection.java:221) en com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers (InternalStreamConnection.java:491) de (SocketStream.java:88) com.mongodb.connection.CommandHelper.receiveReply com.mongodb.connection.CommandHelper.executeCommand de com.mongodb.connection.CommandHelper.receiveCommandResult (CommandHelper.java:121) 'den (CommandHelper.java:134) (CommandHelper. java: 32) com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription (InternalStreamConnectionInitializer.java:83) com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable de com.mongodb.connection.InternalStreamConnectionInitializer.initialize com.mongodb.connection.InternalStreamConnection.open (InternalStreamConnection.java:115) 'den (InternalStreamConnectionInitializer.java:43) dejava.lang.Thread.run de .run (DefaultServerMonitor.java:127) (Thread.java:745) Belgelerinin

Oluşturma

Ben mongoCA.crt ve mongoClient.pem bu w Mongo kabuğu ile orks. Sonra, ben .PEM ithal ve ben yanlış yapıyorum ne java keystore'da

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" 

için .crt istiyor?

+0

Sunucunun ssl etkin olarak çalıştığından emin misiniz? Doğrulamak için herhangi bir ssl config (cli/shell ve java sürücüsü aracılığıyla) bağlanmayı deneyin. – evanchooly

+0

Evet, mongo admin --host mongo1.xxxx.com --ssl --sslPEMKeyFile mongoClient.pem --sslCAFile mongoCA.crt çalışır ama mongo admin - mongo1.xxxx.com yöneticisi değil. Log, – gasparms

+2

Tam olarak benim sorunumu bağlamak mümkün olmadığını söylüyor. Bir çözüm buldun mu? – Nishant

cevap

1

Aynı sorun vardı ve benim için anahtar deposunu yaratma biçimimde bir sorun olduğu ortaya çıktı. Hem güven deposu hem de anahtar deposu için aynı dosyayı Truststore.ts kullandığınızı fark ettim. Bu işe yarayabilir, ancak karışıklığı önlemek için ayrı dosyaları kullanmanızı öneririm.

Kök CA ve mongo kullanıcısı için .pem dosyaları oluşturmuştum ve bunları mongo kabuğuna bağlanmak için başarıyla kullanabildim. Truststore.jks ve keystore.jks oluşturduğumdan.

Öncelikle truststore.jks oluşturmak için koştum: Her iki kamu ve özel anahtarlar bu yüzden ilk bir JKS içe sonra PKCS12 formatına PEM dosyasını dönüştürmek ve ihtiyaç keystore.jks için

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

:

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