2017-05-23 2 views
1

내가 다시 컴파일 시도하고 나는이 오류가 도착할 때까지 내 자바 응용 프로그램이 벌금을 worning했다 : 나는을 만들어했기 때문에javax.net.ssl.SSLHandshakeException 컴파일 할 때 응용 프로그램

build.xml:246: 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:1914) 
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279) 
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:273) 
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1477) 
at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:213) 
at sun.security.ssl.Handshaker.processLoop(Handshaker.java:961) 
at sun.security.ssl.Handshaker.process_record(Handshaker.java:897) 
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1033) 
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1342) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1369) 
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1353) 
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.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153) 
at org.apache.tools.ant.taskdefs.Get$GetThread.openConnection(Get.java:690) 
at org.apache.tools.ant.taskdefs.Get$GetThread.openConnection(Get.java:715) 
at org.apache.tools.ant.taskdefs.Get$GetThread.get(Get.java:606) 
at org.apache.tools.ant.taskdefs.Get$GetThread.run(Get.java:596) 
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:1459) 
... 14 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) 
... 20 more 

내가 그것을 다시 컴파일되었다 변경하지만 일단이 오류가 발생하면 변경 사항을 적용한 후에도이 오류가 발생합니다.

아무도 그 원인이 무엇인지 또는 내 서버에서 갑자기 변경된 사항을 알고 있습니까?

+0

[도움이 되나요?] (https://stackoverflow.com/a/9619478/1790644)? –

+0

감사합니다. Matt. 그것은 트릭을했다. – runnerpaul

답변

0

build.xml:246: 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

이 코드 는 SSL 서버에 연결 빌드하는 동안 의미하지만 서버의 인증서는 클라이언트에 의해 신뢰할 수 없습니다. 이것은 예외에서 우리가 가진 모든 정보입니다.

이유에 대해서는 언급하지 않습니다.

일반적으로 서버의 인증서 (또는 그 CA)는 신뢰할 수있는 서버가 아니며 (구성되거나 기본 신뢰 저장소가 아님) 서버의 호스트 이름이 인증서 CN과 일치하지 않습니다. 트러스트 스토어에 걸었다.) 당신이 전화를 바이 패스 인증 솔루션 아래

1

시도 HTTPS를 API를

1) 쓰기 HttpsTrustManager.java 클래스

2

import java.security.KeyManagementException; 
import java.security.NoSuchAlgorithmException; 
import java.security.SecureRandom; 
import java.security.cert.X509Certificate; 

import javax.net.ssl.HostnameVerifier; 
import javax.net.ssl.HttpsURLConnection; 
import javax.net.ssl.SSLContext; 
import javax.net.ssl.SSLSession; 
import javax.net.ssl.TrustManager; 
import javax.net.ssl.X509TrustManager; 

public class HttpsTrustManager implements X509TrustManager { 

    private static TrustManager[] trustManagers; 
    private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{}; 

    @Override 
    public void checkClientTrusted(
      java.security.cert.X509Certificate[] x509Certificates, String s) 
      throws java.security.cert.CertificateException { 

    } 

    @Override 
    public void checkServerTrusted(
      java.security.cert.X509Certificate[] x509Certificates, String s) 
      throws java.security.cert.CertificateException { 

    } 

    public boolean isClientTrusted(X509Certificate[] chain) { 
     return true; 
    } 

    public boolean isServerTrusted(X509Certificate[] chain) { 
     return true; 
    } 

    @Override 
    public X509Certificate[] getAcceptedIssuers() { 
     return _AcceptedIssuers; 
    } 

    public static void allowAllSSL() { 
     HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { 

      @Override 
      public boolean verify(String arg0, SSLSession arg1) { 
       return true; 
      } 

     }); 

     SSLContext context = null; 
     if (trustManagers == null) { 
      trustManagers = new TrustManager[]{new HttpsTrustManager()}; 
     } 

     try { 
      context = SSLContext.getInstance("TLS"); 
      context.init(null, trustManagers, new SecureRandom()); 
     } catch (NoSuchAlgorithmException e) { 
      //e.printStackTrace(); 
     } catch (KeyManagementException e) { 
      //e.printStackTrace(); 
     } 

     HttpsURLConnection.setDefaultSSLSocketFactory(context 
       .getSocketFactory()); 
    } 

} 
가) 이제 전 bwlow

public static void getServerData(final Context cntx) { 
      myNotificationDb = new Notification_Db(cntx); 
      RequestQueue queue = Volley.newRequestQueue(cntx); 

      HttpsTrustManager.allowAllSSL(); 

      JsonObjectRequest jsObjRequest = new JsonObjectRequest(
        Request.Method.GET, "Url", null, 
        new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 

          // Your response 

         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          // TODO Auto-generated method stub 

         } 

        }) { 
       @Override 
       public Map<String, String> getHeaders() throws AuthFailureError { 

        // Your header parameter if you have otherwise this is optional 

        return headers; 
       } 
      }; 



queue.add(jsObjRequest); 
    } 
같은 API를 호출 기능 아래 전화
관련 문제