2015-10-26 56 views
3

我在改造中使用OkHttp作爲客戶端。我無法擊中某個https網址。該服務器支持TLS 1.0只及以下密碼 TLS_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_RC4_128_MD5Retrofit OkHttp SSLHandshakeException

以下是我對我實例化我OkHttpClient:

OkHttpClient client = new OkHttpClient(); 

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

     // Install the all-trusting trust manager 
     final SSLContext sslContext = SSLContext.getInstance("TLSv1"); 
     sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); 

     // Create an ssl socket factory with our all-trusting manager 
     final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory(); 
     client.setSslSocketFactory(sslSocketFactory); 

     client.setHostnameVerifier(new HostnameVerifier() { 
      @Override 
      public boolean verify(String hostname, SSLSession session) { 
       return true; 
      } 
     }); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 


    return client; 
} 

而且我的應用程序不斷拋出此異常:

javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x9742f000: Failure in SSL library, usually a protocol error error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:770 0xab9fcc4d:0x00000000)

回答

3

由於OkHttp v2.3(release notes),OkHttp不再支持RC4的默認配置。您可以使用ConnectionSpecjavadoc)啓用它,ConnectionSpecTest.javasource code)顯示了一些示例。

+0

'supportsTlsExtensions(true)'是關鍵。你爲我節省了很多時間,謝謝! –