可能的MongoDB和HttpUrlConnection资源冲突?

时间:2017-11-05 01:38:32

标签: java mongodb exception httpurlconnection x509certificate

我创建了一个Java WebSocket Jetty服务器,它使用API​​来使用HttpUrlConnection()检索一些数据。我还有一个在Docker容器中运行的MongoDb实例,它监听端口27017.运行服务器时,我创建了一个与MongoDB的连接,然后尝试使用API​​检索一些数据。随后我收到以下错误:

javax.net.ssl.SSLHandshakeException:  sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这里有一个奇怪的部分:没有与Mongo建立任何连接,数据检索运行顺利,没有错误或异常(证书存在)。我的猜测是,MongoDB驱动程序和Http处理程序之间可能存在冲突,但我在网上找不到任何东西。

以下是API请求的代码:

            URL url=new URL(s);
            HttpURLConnection con  =(HttpURLConnection)url.openConnection();
            con.setRequestMethod("GET");

            br = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            while ((line = br.readLine()) != null) {
                jsonData += line + "\n";
            }
            JSONObject ob;

以下是连接到MongoDB的代码:

public void connect() {

        try {
            client=new MongoClient("localhost:27017");
            db=client.getDatabase("QuoteDB");
            coll = db.getCollection("quotes");
        }catch(MongoException e) {
            System.out.println(e.getMessage());
        }

}

此行引发异常:

br = new BufferedReader(new InputStreamReader(con.getInputStream()));

1 个答案:

答案 0 :(得分:0)

URLConnection表示连接未在本地信任库中找到服务器根证书

Java System.setProperty("javax.net.ssl.trustStore")使用默认信任库。如果连接到MongoDB后与SSL服务器的连接失败,则表示“某人”已更改信任库。

在代码中查找System.getProperty("javax.net.ssl.trustStore")并确保headers在使用MOngoDB时调用外部API时具有相同的值。