Java和HTTPS的问题
我有一个服务器和域,上面配置了“lets encrypt”https。Nginx将所有请求重定向到侦听某个端口的本地java程序。我的浏览器可以发送请求。我还可以使用名为AdvancedRESTClient的Chrome插件发送请求。但如果我尝试使用Java发送get请求,如下所示: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
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版本不信任该服务器,那么将其添加到信任库应该可以解决您的问题