SSL已启用,但套接字不是javax.net.SSL.SSLSocket java mongodb连接的实例

SSL已启用,但套接字不是javax.net.SSL.SSLSocket java mongodb连接的实例,java,mongodb,ssl,ssl-certificate,jsse,Java,Mongodb,Ssl,Ssl Certificate,Jsse,我正在尝试连接MongoDB,它启用了SSL/TLS以及自签名证书。我已将自签名证书加载到本地计算机中。但是得到了例外 SSL is enabled but the socket is not an instance of javax.net.ssl.SSLSocket 参考资料: 下面的代码有问题,它接受所有证书。我希望使用自签名证书(即jvm信任证书)对其进行限制 publicstaticvoidmain(字符串args[])引发异常{ 字符串JAVA\u HOME=“C:\\Progr

我正在尝试连接MongoDB,它启用了SSL/TLS以及自签名证书。我已将自签名证书加载到本地计算机中。但是得到了例外

SSL is enabled but the socket is not an instance of javax.net.ssl.SSLSocket
参考资料:

下面的代码有问题,它接受所有证书。我希望使用自签名证书(即jvm信任证书)对其进行限制

publicstaticvoidmain(字符串args[])引发异常{
字符串JAVA\u HOME=“C:\\Program Files\\JAVA\\jre1.8.0\u 211”;
System.setProperty(“javax.net.ssl.trustStore”,JAVA_HOME+“\\lib\\security\\cacerts”);
System.setProperty(“javax.net.ssl.trustStorePassword”,“yyyy”);
System.setProperty(“javax.net.ssl.keyStore”,JAVA_HOME+“\\lib\\security\\mongo.pkcs12”);
System.setProperty(“javax.net.ssl.keystrepassword”、“xxxx”);
MongoClientURI连接字符串;
字符串uri=”mongodb://ttt:rrr@1.1.1.1:17017/db?authMechanism=SCRAM-SHA-1”;
MongoClientOptions.Builder选项Builder;
optionsBuilder=MongoClientOptions.builder()
.sslEnabled(真)
.sslInvalidHostNameAllowed(true)
.socketFactory(getSSF());
connectionString=newmongoclienturi(uri,optionBuilder);
MongoClient m=新的MongoClient(connectionString);
DB=m.getDB(“DB”);
DBCollection c=db.getCollection(“mongostudent”);
System.out.println(c.findOne());
}
私有静态SSLSocketFactory getSSF()抛出NoSuchAlgorithmException、KeyManagementException{
SSLContext SSLContext;
sslContext=sslContext.getInstance(“TLSv1.2”);
sslContext.init((KeyManager[])null,new TrustManager[]{new X509TrustManager(){
public void checkClientTrusted(X509Certificate[]x509Certificates,字符串s){
System.out.println(“证书:+x509Certificates[0]);
}
public void checkServerTrusted(X509Certificate[]x509Certificates,字符串s){
System.out.println(“证书:+x509Certificates[0]);
}
公共X509证书[]getAcceptedIssuers(){
返回新的X509证书[0];
}
}},new SecureRandom());
返回sslContext.getSocketFactory();
}
}
使用的键工具命令:

  • keytool-import-trustcacerts-C文件:/certificateauth.pem-keystore-cacertskeystore.jks-storepass“xxxx”

  • 已将pkcs文件置于安全文件夹中


  • 我需要对其进行配置,使其只接受受信任的证书。

    “套接字不是
    javax.net.ssl.SSLSocket
    ”的实例。证据?这是一个什么样的例子?这和你的问题有什么关系?解决方案:删除不安全的
    TrustManager
    。将自签名证书导入信任库就足够了。您是指sslContext.init(null,null,null)吗?否,。我的意思是使用默认的
    TrustManager
    。我看你甚至不需要显式的
    SSLContext
    :只需要使用默认的。你还没有回答我的问题。