2017-12-30 49 views
1

자체 서명 된 인증서를 사용하여 서버와 상호 작용하려고합니다.Oreo의 SSL 핸드 셰이크 오류

그것은 누가 잘 동작하지만, 오레오에 대한 예외가 있습니다

javax.net.ssl.SSLHandshakeException: Handshake failed 
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:444) 

일들이 안전하지 않은 프로토콜 폴백 (fallback)에 관해서 변경 같은 안드로이드 O의 changelog, 그것은 보인다 기반으로합니다. 서버의 구성이 this example의 기반으로하는

public static OkHttpClient getClient() { 
    try { 
     // Create a trust manager that does not validate certificate chains 
     final TrustManager[] trustAllCerts = new TrustManager[]{ 
       new X509TrustManager() { 
        @SuppressLint("TrustAllX509TrustManager") 
        @Override 
        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException { 
        } 

        @SuppressLint("TrustAllX509TrustManager") 
        @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("TLS"); 
     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, (X509TrustManager) trustAllCerts[0]); 

     // Allow our hostname 
     builder.hostnameVerifier((hostname, session) -> { 
      return hostname.equals(API_HOST_NAME); 
     }); 
     builder.addInterceptor(new MyCustomInterceptor()); 
     if (BuildConfig.DEBUG) { 
      builder.addInterceptor(new HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BASIC)); 
      builder.addNetworkInterceptor(new StethoInterceptor()); 
     } 
     return builder.build(); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
} 

: 내 신뢰 관리자가 문제가 아니라고 난 그냥 확인하고 싶습니다.

내 클라이언트가 눈에 띄게 이상하거나, 서버에 문제가 있습니까?

+0

여기도 예외입니다. 해결책을 찾았습니까? – gleroyDroid

+0

아직 불행히도 –

+0

행운을 고쳐 주시겠습니까? 또는 어떤 관련 솔루션? –

답변

0

는 더 많은 테스트 후에는 오레오 작업 것처럼 듯, 즉 우리의 문제에 대한 해결책은 this 안드로이드 버그를 참조 this 스택 오버 플로우에서 발견되는 안드로이드 7.0

에 문제가 있었다.

요약하면,이 문제는 하나의 타원 곡선 만 지원하는 Android 7.0과 관련이 있습니다.