我创建了一个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()));
答案 0 :(得分:0)
URLConnection
表示连接未在本地信任库中找到服务器根证书
Java System.setProperty("javax.net.ssl.trustStore")
使用默认信任库。如果连接到MongoDB后与SSL服务器的连接失败,则表示“某人”已更改信任库。
在代码中查找System.getProperty("javax.net.ssl.trustStore")
并确保headers
在使用MOngoDB时调用外部API时具有相同的值。