2016-04-14 18 views
1

Подробнее о моем приложении:SSLHandshakeException использованием HttpsURLConnection в Android

compileSdkVersion 22 
    buildToolsVersion '22.0.1' 



    defaultConfig { 
     applicationId "My application id" 
     minSdkVersion 13 
     targetSdkVersion 22 
     versionCode 4 
     versionName "2" 
    } 

Я использую HttpsURLConnection для входа authentication.But теперь я перед javax.net.ssl.SSLHandshakeException: javax.net.ssl. SSLProtocolException, что тоже на устройствах, работающих под android lollipop. Аутентификация работает так, как ожидается, на устройствах, работающих под управлением OS verions abouve 5. Пожалуйста, дайте мне знать ваши предложения по этой проблеме.

Вот код, я использую:

HttpsURLConnection conn = null; 
    try { 
     URL url = new URL("URL to my application"); 

     String authStr = username + ":" + password; 

     String authEncoded = Base64.encodeToString(authStr.getBytes(), Base64.NO_WRAP); 
     conn = (HttpsURLConnection) url.openConnection(); 
     conn.setRequestMethod("POST"); 
     conn.setRequestProperty("Authorization", "Basic " + authEncoded); 
     conn.setDoOutput(true); 

     conn.setConnectTimeout(120000); 
     int code = conn.getResponseCode(); 

     if(code ==200){ 
      for(int i=0;i<conn.getHeaderFields().size();i++){ 
       String value = conn.getHeaderField(i); 

       HeaderElement headerElement = BasicHeaderValueParser.parseHeaderElement(value, new BasicHeaderValueParser()); 

       if(headerElement.getName().equals("SMSESSION")){ 

        cookieString = SMSESSION+"="+headerElement.getValue(); 
        Log.d("validhdvaluelogin",cookieString); 
        cookieeditor.putString(ArticleListActivity.CURRENT_COOKIE, 
          cookieString); 
        cookieeditor.apply(); 

        return true; 
       } 


      } 
     }else { 
      return false; 
     } 



    } 

    catch (Exception e) { 
     e.printStackTrace(); 
     return false; 
    } 


    if (conn != null) { 
     conn.disconnect(); 
    } 

    return false; 

А вот исключение:

javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL  
handshake aborted: ssl=0xb87b0350: 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:741 0xa9092990:0x00000000) 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448) 
at com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:661) 
at com.android.org.conscrypt.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:632) 
at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:70) 
at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83) 
at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170) 
at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106) 
at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129) 
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:172) 
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
at com.ericsson.labs.it.infoservicemx.network.AuthComm.login(AuthComm.java:148) 
at com.ericsson.labs.it.infoservicemx.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:312) 
at com.ericsson.labs.it.infoservicemx.LoginActivity$UserLoginTask.doInBackground(LoginActivity.java:230) 
at android.os.AsyncTask$2.call(AsyncTask.java:288) 
at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
at java.lang.Thread.run(Thread.java:841) 
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb87b0350: 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:741 0xa9092990:0x00000000) 
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:405) 
... 23 more 
+0

Я думаю, что связанные с ним вопросы http://stackoverflow.com/a/27928360/3436179 – Alexander

+0

Решение, предоставленное в этом сообщении, не помогло мне –

ответ

2

Я наконец-то нашел решение моей проблемы. С помощью библиотеки NetCipher для httpsurlconnection. Вместо использования:

HttpsUrlConnection conn = (HttpsURLConnection) url.openConnection(); 

Использование:

HttpsUrlConnection conn = NetCipher.getHttpsURLConnection(url); 

Это решило мою проблему SSLv3 рукопожатие.

+0

Это помогло мне решить проблему. –