Java和HTTPS的问题

Java和HTTPS的问题,java,ssl,nginx,Java,Ssl,Nginx,我有一个服务器和域,上面配置了“lets encrypt”https。Nginx将所有请求重定向到侦听某个端口的本地java程序。我的浏览器可以发送请求。我还可以使用名为AdvancedRESTClient的Chrome插件发送请求。但如果我尝试使用Java发送get请求,如下所示: public static String getResponse(String urlToRead) throws Exception { StringBuilder result = new St

我有一个服务器和域,上面配置了“lets encrypt”https。Nginx将所有请求重定向到侦听某个端口的本地java程序。我的浏览器可以发送请求。我还可以使用名为AdvancedRESTClient的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.validator异常:PKIX路径生成失败: sun.security.provider.certpath.SunCertPathBuilderException:无法 找到请求目标的有效证书路径


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

如果这只是为了测试puspose,那么可以将自签名服务器证书添加到java客户机信任库(默认情况下,JRE_PATH/lib/security/cacerts)


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

抱歉@Tony,我不知道letsencrypt是什么。您知道您的服务器java版本是否信任该证书吗?看起来对我来说不是。。。()。如果您的java版本不信任该服务器,那么将其添加到信任库应该可以解决您的问题