当前位置: 首页 > 知识库问答 >
问题:

Https/ssl post方法可以在开发人员机器上工作,但不能在服务器上工作-java

袁泓
2023-03-14
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
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1964)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:328)
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:322)
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1614)
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:1052)
at sun.security.ssl.Handshaker.process_record(Handshaker.java:987)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1072)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1385)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1413)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1397)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:263)
at mehritco.ir.connection.URLConnection.read(URLConnection.java:38)
at mehritco.ir.cortexclient.objects.invoice.Price.setExchangeRate(Price.java:42)

下面是连接到HTTPS/SSL的我的代码

public String readLinkInJson(String url, String data) throws MalformedURLException, IOException {
    URL obj = new URL(url);
    System.out.println(data);
    HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
    con.setHostnameVerifier(hv);
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    con.setDoOutput(true);
    // For POST only - START
    try (OutputStream os = con.getOutputStream()) {
        os.write(data.getBytes("UTF-8"));
        os.flush();
    }
    // For POST only - END
    String inputLine;
    StringBuilder response = new StringBuilder();
    int responseCode = con.getResponseCode();
    if(responseCode >= 400){
    try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
    }
    }else{
    try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getErrorStream()))) {
        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }
    }
    }
    return response.toString();

}

那我能做什么呢?请帮我找到正确的代码...

共有1个答案

韩禄
2023-03-14
 TrustManager[] trustAllCerts = new TrustManager[]{
            new X509TrustManager() {
                @Override
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }

                @Override
                public void checkClientTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }

                @Override
                public void checkServerTrusted(
                        java.security.cert.X509Certificate[] certs, String authType) {
                }
            }
        };

        try {
            SSLContext sc = SSLContext.getInstance("SSL");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (GeneralSecurityException e) {
        }

 类似资料:
  • 你好,我有一个我开发的dll。我在使用dll导入的网站中使用此dll。当我通过visual studio运行网站时,一切都正常。但当我用iis运行它时,它没有错误。请参阅所附代码。谢谢在这里输入图像描述

  • 我有一个应用程序,它使用一个在开发环境中工作的数据列表,但在生产环境中返回一个没有查找的空白字段。我想广泛使用datalist,因为它很容易提供一个自动完整的工具,但除非它在生产中工作。 Dev是在Win7下的IE11.0上的MVC VS 2010,在HTML5Test中得分302。产品是服务器2012 R2标准上的IE11.0,报告为Win8.1,在HTML5Test中得分为312分。 经过大量

  • 我试过这里发布的其他解决方案,但没有任何效果。。 我有下面的代码。htaccess文件。 我收到一封电子邮件,通过点击url,我可以访问注册表。php 我开始登记表格。比如: 有人知道为什么这在本地主机上有效,而在远程服务器上无效吗?

  • 我是android新手,我能够在kotlin中为我的应用程序设置firebase。如果我在Nexus 5X API 27 emulator中运行该应用程序,我就能够获取数据库,但当我在实际设备三星S5(Google play Services V 12.5.29,android V 5.0)中运行该应用程序时,我无法获得addValueEventListener回调。 Gradle文件: 我知道这

  • 我有一个在远程服务器上运行的spring boot应用程序。当我构建它在HTTP上工作时,一切工作都很好。但当我试图设置SSL时,应用程序不能工作。它不会抛出错误或任何东西。但我无法访问浏览器中的任何页面(我尝试了https://www.example.com、https://www.example.com:8443、https://example.com等)。 > 我已经从certificate

  • 我正在自学servlet,找到了一些非常好的教程,并在Eclipse Neon EE中取得了巨大成功。(非常基本的servlet,只提供一个简单的静态网页) 在安装Eclipse Neon EE之前,我安装了Tomcat standalone,并对其进行了测试,得到了regulat apache Tomcat页面。我找到的教程还指导我如何在Eclipse中设置tomcat服务器。他们还向我展示了如