2016-08-02 2 views
0

두 클래스를 만들었습니다 : -이 중 하나는 OkHttp를 확장하고 새로운 메소드 getUnsafeOkHttpClient()를가집니다.SSL 인증을 사용하여 okhttp를 생성하는 방법

public class GetExampleOkHttp extends OkHttpClient { 
    public OkHttpClient getUnsafeOkHttpClient() { 
     try { 
      // Create a trust manager that does not validate certificate chains 
      final TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { 
       @Override 
       public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) 
         throws CertificateException { 
       } 
       @Override 
       public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) 
         throws CertificateException { 
       } 
       @Override 
       public java.security.cert.X509Certificate[] getAcceptedIssuers() { 
        return new java.security.cert.X509Certificate[] {}; 
       } 
      } }; 
      // Install the all-trusting trust manager 
      final SSLContext sslContext = SSLContext.getInstance("SSL"); 
      sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 
      // Create an ssl socket factory with our all-trusting manager 
      final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
      OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
      builder.sslSocketFactory(sslSocketFactory); 
      builder.hostnameVerifier(new HostnameVerifier() { 
       @Override 
       public boolean verify(String hostname, SSLSession session) { 
        return true; 
       } 
      }); 
      OkHttpClient okHttpClient = builder.build(); 
      return okHttpClient; 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 
} 

그리고 다른 Main 클래스 :

class ExampleOkHttpMain 
    public static void main(String[] args) throws IOException {  
     GetExampleOkHttp example = new GetExampleOkHttp();   
     example.getUnsafeOkHttpClient(); 

      Request request = new Request.Builder() 
       .url("https://lachuzhnikov.kiev.ua/test.txt") 
       .build(); 
      Response response = example.newCall(request).execute(); 
      System.out.println(response.body().string());  
    } 
} 

하지만 여전히 오류가 있습니다

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 at sun.security.ssl.Alerts.getSSLException(Unknown Source) at sun.security.ssl.SSLSocketImpl.fatal(Unknown Source) at sun.security.ssl.Handshaker.fatalSE(Unknown Source)

답변

0

1 : 오픈 파이어 폭스와 페이지와 수출 CER로 이동 : https://sourceforge.net/projects/portecle/
2 다운로드를 012 : C : \ Program Files \ Java \ jdk1.7.0_79 \ jre \ lib \ security) 01 : 4 : cacerts를 다른 폴더에 복사하십시오.
5 단계 : 2 단계에서 cacerts 파일을 열어
을 저장하십시오. 6 : 새 cacerts를 복사하고 바꿉니다. Java \ jdk .... \ jre \ lib \ 보안 \ cacerts

관련 문제