Volley SSLHandshakeException на устройствах до леденцов

Я использую StringRequest для вызова веб-службы. Он отлично работает на устройствах под управлением Android 5.0 и выше. Эта ошибка возникает только на устройствах с версией 4.0 и выше и ниже 5.0. Вот моя трассировка стека

/Volley: [1] 7.onErrorResponse: Menus Error==>
03-23 02:56:09.201 1981-1981/com.example W/System.err: com.android.volley.NoConnectionError: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb8d14900: Failure in SSL library, usually a protocol error
03-23 02:56:09.201 1981-1981/com.example W/System.err: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0xa5046d5c:0x00000000)
03-23 02:56:09.211 1981-1981/com.example W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:177)
03-23 02:56:09.211 1981-1981/com.example W/System.err:     at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
03-23 02:56:09.211 1981-1981/com.example W/System.err:     at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)
03-23 02:56:09.211 1981-1981/com.example W/System.err: Caused by: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb8d14900: Failure in SSL library, usually a protocol error
03-23 02:56:09.211 1981-1981/com.example W/System.err: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure (external/openssl/ssl/s23_clnt.c:741 0xa5046d5c:0x00000000)
03-23 02:56:09.231 1981-1981/com.example W/System.err:     at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:448)
03-23 02:56:09.231 1981-1981/com.example W/System.err:     at com.android.okhttp.Connection.upgradeToTls(Connection.java:146)
03-23 02:56:09.241 1981-1981/com.example W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:107)
03-23 02:56:09.241 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:294)
03-23 02:56:09.241 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendSocketRequest(HttpEngine.java:255)
03-23 02:56:09.241 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:206)
03-23 02:56:09.261 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:345)
03-23 02:56:09.261 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:296)
03-23 02:56:09.261 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:503)
03-23 02:56:09.271 1981-1981/com.example W/System.err:     at com.android.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136)
03-23 02:56:09.271 1981-1981/com.example W/System.err:     at com.android.volley.toolbox.HurlStack.executeRequest(HurlStack.java:99)
03-23 02:56:09.281 1981-1981/com.example W/System.err:     at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:131)
03-23 02:56:09.281 1981-1981/com.example W/System.err:  ... 2 more

PS: я уже пробовал решение по этой ссылке

Исключение SSL при использовании Volley


person Ashwin H    schedule 23.03.2018    source источник
comment
Вы проверили, вызываете ли вы ссылку http или https ?! у меня была та же проблема, и это было потому, что я звонил по URL-адресам http и, изменив базовый адрес на https, он работал нормально.   -  person Omid Heshmatinia    schedule 23.03.2018
comment
@Omid Heshmatinia, я использую https, это работало в http, но произошла ошибка, когда я изменил его на https.   -  person Ashwin H    schedule 23.03.2018


Ответы (1)


Похоже, это известные эксплойты в Android.

https://developer.android.com/training/articles/security-gms-provider

try {
  ProviderInstaller.installIfNeeded(getContext());
} catch (GooglePlayServicesRepairableException e) {
   e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
   e.printStackTrace();
}

Примечание. Это решение работает только в том случае, если на устройствах установлено приложение Play Service.

person ramji    schedule 11.05.2018