我有一台服务器和域nodeserver.fvds.ru,其上配置了“允许加密”https。 Nginx将所有请求重定向到侦听某个端口的本地java程序。我的浏览器可以发送请求。我也可以使用名为Advanced REST Client的Chrome插件发送请求。但是,如果我尝试使用Java发送get请求:
public static String getResponse(String urlToRead) throws Exception {
StringBuilder result = new StringBuilder();
URL url = new URL(urlToRead);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
result.append(line);
}
rd.close();
return result.toString();
}
public static void main(String[] args) throws Exception
{
System.out.println(getResponse("https://nodeserver.fvds.ru/"));
}
我会得到
线程“main”中的异常javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:PKIX路径构建失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到所请求目标的有效证书路径
答案 0 :(得分:0)
您的服务器证书是否已自签名?如果是这种情况,Java将无法找到从您的服务器证书到任何受信任CA的证书路径。
如果仅用于测试pusposes,您可以将自签名服务器证书添加到java客户端信任库(默认情况下为JRE_PATH / lib / security / cacerts)。
如果这是您的生产环境,则应避免使用自签名证书