java - 太阳.security.validator.ValidatorException : PKIX path building failed: unable to find valid certification path to requested target

标签 java php web-services ssl

我已经从一台服务器迁移到一台新服务器。 我为我的移动应用程序使用 PHP 网络服务来访问数据库中的数据。我已经安装了 SSL 证书,web 服务在浏览器和 iphone 应用程序(使用 ASIHTTPRequest 库)上运行良好。 但是 android 应用程序不会加载同一服务的数据。如此调试,这是我得到的错误。

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:1868)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1337)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:154)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:998)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1087)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
    at com.turnkey.maths.Test.main(Test.java:60)
Caused by: 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.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1319)
    ... 12 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
    ... 18 more

这是我用来收集数据的方法

try 
{
    HttpURLConnection connection;
    OutputStreamWriter request = null;
    URL url = null;   
    String parameters = "query=SELECT * from table;";
    url = new URL("https://www.domain.com/weservice/index.php?");
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    connection.setRequestMethod("POST");    
    request = new OutputStreamWriter(connection.getOutputStream());
    request.write(parameters);
    request.flush();
    request.close();            
    String line = "";               
    InputStreamReader isr = new InputStreamReader(connection.getInputStream());
    BufferedReader reader = new BufferedReader(isr);
    StringBuilder sb = new StringBuilder();
    while ((line = reader.readLine()) != null)
    {
        sb.append(line + "\n");
    }
    String response = sb.toString();
    isr.close();
    reader.close();
    System.out.println(response);
} catch (Exception e) {
    e.printStackTrace();
}

没有 https 的网络服务链接正常。 我已按照 this 的说明进行操作回答,但这没有帮助。 知道 Web 服务或 Java keystore 有什么问题吗? 谢谢

最佳答案

几个月前我遇到过类似的问题。域的 ssl 证书未正确安装。基本上,服务器管理员为 domain.com 安装了证书,我使用的是链接 https://www.domain.com/index.php这引起了问题。当我在没有 www 的情况下进行检查时,它起作用了,所以我要求我的服务器管理员为 www.domain.com 重新安装 SSL 证书,之后我就能够访问安全链接上的数据。 我希望它有帮助 干杯

关于java - 太阳.security.validator.ValidatorException : PKIX path building failed: unable to find valid certification path to requested target,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611189/

相关文章:

java - Google App Engine 查询过滤器按日期

java - 我如何在 Slick2D/LWJGL 或一般游戏编程中使用 "delta"?

php - 使用 array_diff(),如何从 array2 而不是 array1 中获取差异?

java - 迭代器添加到数组列表的并发修改异常

java - 从 Firestore 查询数据到 Arraylist 但一无所获?

javascript - 使用 Vanilla Javascript 发布到 Php 文件

php - 提交时无法出现确认框

c# - 使用 JavaScript 连接到 .NET 服务器

web-services - Glassfish 上的安全 Web 服务客户端

android - Arcgis 可以用于安卓吗?