title: sun.security.validator.ValidatorException: PKIX path building failed: unable to find valid certification path to requested target
body: <p>I have migrated from one server to a new server.
  I using a PHP webservice for my mobile application to access the data from the database. I have installed the SSL certificate and the webservice works fine on the browser and for the iphone app (using ASIHTTPRequest lib).
  But the android app does not load the data for the same service. So debugged and this is the error full I am getting.</p>
  
  <pre><code>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
  </code></pre>
  
  <p>this is the method I use to collect the data </p>
  
  <pre><code>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();
  }
  </code></pre>
  
  <p>The webservice link without <strong>https</strong> fine.
  I have followed the instruction from <a href="https://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore">this</a> answer but this did not help.
  Any idea what is wrong with the web service or the java keystore?
  Thanks </p>