Java和HTTPS的麻烦

时间:2016-04-06 12:04:44

标签: java ssl nginx

我有一台服务器和域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:无法   找到所请求目标的有效证书路径

1 个答案:

答案 0 :(得分:0)

您的服务器证书是否已自签名?如果是这种情况,Java将无法找到从您的服务器证书到任何受信任CA的证书路径。

如果仅用于测试pusposes,您可以将自签名服务器证书添加到java客户端信任库(默认情况下为JRE_PATH / lib / security / cacerts)。

如果这是您的生产环境,则应避免使用自签名证书