java - Java 和 HTTPS 的问题

标签 java ssl nginx

我有一个服务器和域 nodeserver.fvds.ru在其上配置“让加密”https。 Nginx 将所有请求重定向到监听某个端口的本地 java 程序。我的浏览器可以发送请求。我还可以使用名为 Advanced REST Client 的 Chrome 插件发送请求。但是如果我尝试像这样使用 Java 发送获取请求:

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/"));
    }

我会得到

Exception in thread "main" 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

最佳答案

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

如果这只是为了测试目的,您可以将自签名服务器证书添加到您的 Java 客户端信任库(默认情况下,JRE_PATH/lib/security/cacerts)。

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

关于java - Java 和 HTTPS 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36450606/

相关文章:

ssl - 在 Tomcat 中使用虚拟主机时如何将 HTTP 流量重定向到 HTTPS

ruby-on-rails - 生产环境中的图像上传至 Amazon S3 失败

java - token "package"上的语法错误,需要导入 (Java)

java - TreeSet 如何检查重复项

ssl - 如何创建仅支持 TLS 1.3 的 tlslite-ng 服务器?

.htaccess - 将 Nginx 重写从 "if"转换为 "try_files"

nginx 在单独的服务器上 proxy_pass 到多个 Rails 应用程序,在不同的盒子中独立的乘客上有子 URI

java - AndroidManifest 不匹配

java - 确保按顺序获取 Java 同步锁?

ios - 不同的有效代码示例抛出相同的错误