У меня проблемы с подключением устройств Android с API <21 к моему серверу nginx.Все результаты получены с эмулированного устройства API 19. </p>
Я пытался использовать VolleyToolboxExtension
и NoSSLv3Factory
, как предложено в другом месте, но все еще получал серьезные ошибки, как показано ниже, за исключением того, что вместо sslv3 это был tlsv1.
Мой текущий подход заключается в том, чтобы позволить старым версиям Android подключаться через SSLv3. Но это по-прежнему вызывает ошибки, подобные приведенным ниже.
Примечание. Я знаю, что SSLv3 не работает, но я использую другой сертификати я не отправляю ничего, что касается безопасности.Основная идея состоит в том, чтобы сделать опрос, чтобы я мог решить, хочу ли я отказаться от поддержки более старых версий Android SDK.
error during request: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0xb8a45890: 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 0x8d959990:0x00000000)
Я использую следующий код для подключения:
final String url;
if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP ){
url = "https://abc.badssl.example.com";
} else {
url = "https://abc.example.com";
}
final JSONObject jsonBody;
try {
jsonBody = new JSONObject("{\"api\":" + Build.VERSION.SDK_INT + "}");
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url,
jsonBody,
response -> {
try {
Log.d(TAG, "Response is: " + response.getInt("api"));
} catch (JSONException e) {
Log.wtf(TAG, e);
}
wasRunning = true;
loading.postValue(false);
}, e -> {
Log.e(TAG, "error during request: " + e.getMessage());
error.postValue(true);
});
jsonObjectRequest.setShouldCache(false);
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(DefaultRetryPolicy.DEFAULT_TIMEOUT_MS, 5, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.getCache().clear();
queue.add(jsonObjectRequest);
} catch (JSONException e) {
Log.wtf(TAG, e);
}
И это моя конфигурация nginx для abc.badssl.example.com, использующая другой сертификат:
listen 443 ssl;
server_name abc.badssl.example.com;
ssl on;
ssl_protocols SSLv3;
ssl_dhparam /etc/nginx/ssl/dhparams.pem;
#worker shared ssl cache
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_ciphers 'ECDHE-ECDSA-AES256-SHA:EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:!DHE-RSA-DES-CBC-SHA:!DHE-RSA-CAMELLIA256-SHA:!DHE-RSA-CAMELLIA128-SHA:!DHE-DSS-CBC-SHA:!DHE-RSA-DES-CBC3-SHA';
fastcgi_param HTTPS on;
Я думаю, что я неправильно понял параметры nginx, но не могу найти99% - это либо отключение SSLv3, либо ничего о текущей версии залпа (неработающие ссылки в SO).