2017-12-30 32 views
1

Ich versuche, mit einem Server mit einem selbst signierten Zertifikat zu interagieren.SSL-Handshake-Fehler auf Oreo

Es funktioniert für Nougat in Ordnung, aber hat eine Ausnahme für Oreo:

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

Basierend off Android O changelog, es scheint, wie die Dinge in Bezug auf unsicheres Protokoll Fallbacks geändert haben. Ich möchte nur sicherstellen, dass mein Vertrauen Manager nicht das Problem:

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); 
    } 
} 

Die Konfigurationen des Servers aus dem this example basieren.

Gibt es irgendeinen sichtbaren Fehler mit meinem Client, oder ist das vielleicht ein Problem auf dem Server?

+0

Die gleiche Ausnahme hier. Hast du eine Lösung gefunden? – gleroyDroid

+0

Noch nicht leider –

+0

Irgendwelche Glückssache? oder irgendeine relevante Lösung? –

Antwort

0

Nach mehr Tests, schien es, wie es auf Oreo arbeitet, und war nämlich ein Problem mit Android 7.0

Die Lösung für unser Problem in this Stapelüberlauf gefunden wird, die this Android Bug verweist.

Zusammenfassend hatte das Problem mit Android 7.0 nur eine elliptische Kurve zu unterstützen.

Verwandte Themen