2017-11-04 16 views
0

私はOreoデバイス上で動作させようとしています。古いデバイスでは完璧に動作しますが、Oreoでは動作しません。 私は握手で問題を抱えていたので、私はクライアントにRetrofit 2.3 8.0デバイスで受け入れ可能なプロトコルを見つけることができません

ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) 
    .tlsVersions(TlsVersion.TLS_1_2) 
    .cipherSuites(CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 
    .build(); 

そして

.connectionSpecs(Collections.singletonList(spec)) 

を追加しました。 全コード:

private static Retrofit getClient() { 
    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 
    ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) 
      .tlsVersions(TlsVersion.TLS_1_2) 
      .cipherSuites(CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 
      .build(); 

    OkHttpClient client = new OkHttpClient.Builder() 
      .addInterceptor(interceptor) 
      .connectionSpecs(Collections.singletonList(spec)) 
      .build(); 

    if (retrofit == null) { 
     retrofit = new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .client(client) 
       .build(); 
    } 
    return retrofit; 
} 

しかし、今、私はエラー

D/OkHttp: <-- HTTP FAILED: java.net.UnknownServiceException: Unable to find acceptable protocols. isFallback=false, modes=[ConnectionSpec(cipherSuites=[TLS_DHE_RSA_WITH_AES_256_CBC_SHA], tlsVersions=[TLS_1_3], supportsTlsExtensions=true)], supported protocols=[TLSv1, TLSv1.1, TLSv1.2]

D/Error: Unable to find acceptable protocols. isFallback=false, modes=[ConnectionSpec(cipherSuites=[TLS_DHE_RSA_WITH_AES_256_CBC_SHA], tlsVersions=[TLS_1_3], supportsTlsExtensions=true)], supported protocols=[TLSv1, TLSv1.1, TLSv1.2]

どれsuggetionsを抱えていますか?

EDIT 今のところこれを実行しています。

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
      client = new OkHttpClient.Builder() 
        .addInterceptor(interceptor) 
        .build(); 
     }else { 
      ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS) 
        .tlsVersions(TlsVersion.TLS_1_2) 
        .cipherSuites(CipherSuite.TLS_DHE_RSA_WITH_AES_256_CBC_SHA) 
        .build(); 

      client = new OkHttpClient.Builder() 
        .addInterceptor(interceptor) 
        .connectionSpecs(Collections.singletonList(spec)) 
        .build(); 
     } 

答えて

1

OkHttpは、デバイスで有効になっているTLSバージョンと、独自の接続仕様との交差を使用します。暗号スイートにも同じです。

おそらく、ここで起こっていることは、交差点にウェブサーバーがサポートしているものがないことです。

関連する問題