2015-10-26 57 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)'是关键。你为我节省了很多时间,谢谢! –