2017-12-30 56 views
1

自己署名証明書を使用してサーバーとやり取りしようとしています。それはヌガーのために正常に動作しますが、オレオの例外を持ってOreoでのSSLハンドシェイクエラー

アンドロイドOの changelogオフに基づいて
javax.net.ssl.SSLHandshakeException: Handshake failed 
    at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:444) 

物事が安全でないプロトコルフォールバックに関しては変更されているように、それは思えません。私はちょうど私のトラストマネージャが問題ではないことを確認したいと思います:

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

サーバーの構成はthis exampleのオフに基づいています。

私のクライアントに間違った何かがありますか?これはおそらくサーバー上の問題でしょうか?

+0

ここでも同じです。あなたは解決策を見つけましたか? – gleroyDroid

+0

まだ残念ながら –

+0

運がいいですか?または任意の関連する解決策? –

答えて

0

は、より多くのテストの後、オレオに取り組んでいたように思えたし、すなわち、私たちの問題を解決するには、this Androidのバグを参照thisスタックオーバーフロー、中に発見されたアンドロイド7.0

の問題でした。

要約すると、この問題はAndroid 7.0で唯一の楕円曲線をサポートすることと関係していました。

関連する問題