Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Mongo Java客户端:如何在启用SSL但没有证书的情况下连接?_Java_Mongodb_Ssl_Mongo Java_Mongo Java Driver - Fatal编程技术网

Mongo Java客户端:如何在启用SSL但没有证书的情况下连接?

Mongo Java客户端:如何在启用SSL但没有证书的情况下连接?,java,mongodb,ssl,mongo-java,mongo-java-driver,Java,Mongodb,Ssl,Mongo Java,Mongo Java Driver,为了进行测试,我设置了一个mongodb服务器,它允许无证书的ssl连接。我能够使用RoboMongo和mongo-c-driver以这种方式连接,但是当我尝试Java时,我得到: {javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有

为了进行测试,我设置了一个mongodb服务器,它允许无证书的ssl连接。我能够使用RoboMongo和mongo-c-driver以这种方式连接,但是当我尝试Java时,我得到:

{javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径},原因是{sun.security.validator.ValidatorException:PKIX路径生成失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径},原因是{sun.security.provider.certpath.SunCertPathBuilderException:找不到请求目标的有效证书路径}

我尝试将套接字工厂设置为使用默认套接字,但得到:
com.mongodb.mongonternalexception:SSL已启用,但套接字不是javax.net.SSL.SSLSocket的实例


如何建立此连接?

因此基于通用SSL和ZZ编码器

MongoClient mongoClient = new MongoClient(serverAddress, 
Collections.singletonList(mongoCredential), MongoClientOptions.builder().sslEnabled(true).socketFactory(getNoopSslSoketFactory()).build());


private static SSLSocketFactory getNoopSslSocketFactory() {
    SSLContext sslContext;
    try {
        sslContext = SSLContext.getInstance("SSL");

        // set up a TrustManager that trusts everything
        sslContext.init(null, new TrustManager[] { new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        }}, new SecureRandom());
    } catch (NoSuchAlgorithmException | KeyManagementException e) {
        LOG.error("Couldn't create SSL Context for MongoDB connection", e);
        throw new RuntimeException(e);
    }
    return sslContext.getSocketFactory();
}

```

@EJP您想详细说明一下吗?连接仍然使用SSL加密,但没有信任证书,因此双方都不确定与谁通信。我同意这远没有那么安全,但这是一种可以用于MongoDb的配置,我需要对其进行测试。当然,我的两个实例都在测试环境中并使用测试数据,正如我所提到的,这绝不是测试的一部分,测试有效用例。不知道你为什么会因为这个@EJP而生气