Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从JAVA连接到Mongo SSL副本集_Java_Mongodb_Ssl_Ssl Certificate - Fatal编程技术网

Can';t从JAVA连接到Mongo SSL副本集

Can';t从JAVA连接到Mongo SSL副本集,java,mongodb,ssl,ssl-certificate,Java,Mongodb,Ssl,Ssl Certificate,我正在尝试使用SSL加密设置MongoDB的最新版本,我可以从MongoShell进行连接,但当我从Java客户端进行连接时,遇到了一个错误 有效 mongo管理员--主机mongo1.xxxx.com--ssl--sslPEMKeyFile mongoClient.pem--sslCAFile mongoCA.crt 不起作用 public static void main(String args[]){ System.setProperty("javax.net.ssl.trustS

我正在尝试使用SSL加密设置MongoDB的最新版本,我可以从MongoShell进行连接,但当我从Java客户端进行连接时,遇到了一个错误

有效

mongo管理员--主机mongo1.xxxx.com--ssl--sslPEMKeyFile mongoClient.pem--sslCAFile mongoCA.crt

不起作用

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());
}
我从Mongo方面得到这个错误:

2015-06-09T15:08:14.431Z I网络[initandlisten]连接 从192.168.33.1:38944#585接受(3个连接现在打开) 2015-06-09T15:08:14.445Z电子网络[conn585]无SSL证书 由同行提供;连接被拒绝2015-06-09T15:08:14.445Z I 网络[conn585]端连接192.168.33.1:38944(2个连接 现在打开)2015-06-09T15:08:14.828Z I网络[conn580]端连接 192.168.33.13:39240(1个连接现在打开)

在java客户端程序中

INFORMACIÓN:连接到服务器时监视器线程中出现异常 mongo1.xxxx.com:27017 com.mongodb.mongoScope异常: 提前到达流的末端 com.mongodb.connection.SocketStream.read(SocketStream.java:88)位于 com.mongodb.connection.InternalStreamConnection.receiveResponseBuffers(InternalStreamConnection.java:491) 在 com.mongodb.connection.InternalStreamConnection.receiveMessage(InternalStreamConnection.java:221) 在 com.mongodb.connection.CommandHelper.receiveReply(CommandHelper.java:134) 在 com.mongodb.connection.CommandHelper.receiveCommandResult(CommandHelper.java:121) 在 com.mongodb.connection.CommandHelper.executeCommand(CommandHelper.java:32) 在 com.mongodb.connection.InternalStreamConnectionInitializer.initializeConnectionDescription(InternalStreamConnectionInitializer.java:83) 在 com.mongodb.connection.InternalStreamConnectionInitializer.initialize(InternalStreamConnectionInitializer.java:43) 在 com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) 在 com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunName.run(DefaultServerMonitor.java:127) 运行(Thread.java:745)

证书的创建

我有mongoCA.crt和mongoClient.pem,它们与mongoshell一起工作。然后,我想将.pem和.crt导入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"

我做错了什么?

我也有同样的问题,对我来说,这是我创建密钥库的方式的问题。我注意到您对信任库和密钥库都使用了相同的文件truststore.ts。这是可行的,但我建议使用单独的文件以避免混淆

我已经为根CA和mongo用户创建了.pem文件,并且能够成功地使用它们连接mongo shell。我从中创建了truststore.jks和keystore.jks

首先,要创建truststore.jks,我运行了:

keytool -import -alias root -storepass mypass -keystore truststore.jks -file rootca.pem -noprompt
对于keystore.jks,您需要公钥和私钥,因此首先将PEM文件转换为PKCS12格式,然后导入到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

您确定服务器正在启用ssl的情况下运行吗?尝试在没有任何ssl配置的情况下进行连接(通过cli/shell和java驱动程序)以进行验证。是的,mongo admin--host mongo1.xxxx.com--ssl--sslPEMKeyFile mongoClient.pem--sslCAFile mongoCA.crt起作用,但mongo admin--host mongo1.xxxx.com不起作用。日志说这不可能完全解决我的问题。你找到解决办法了吗?