Как рассказать версию TLS в Android Volley
мой проект использует Android Volley network framework в течение длительного времени, но недавно я нашел ошибку протокола SSL 3.0, опубликованную в Интернете.
Я хочу знать, как я могу узнать, какую версию TLS использовал мой проект, и как подтвердить, обновлена ли библиотека.
вот мой фрагмент исходного кода:
HttpStack stack = new HurlStack();
Network network = new BasicNetwork(stack);
mHttpRequestQueue = new RequestQueue(new NoCache(), network);
mHttpRequestQueue.start();
Я думаю, что точка находится в классе HurlStack, и это зависит от org.apache.http
пакет, но я не могу понять, где TLS / SSL конфигурация.
3 ответов
вы можете изменить версию TLS, используемую в Volley, создав пользовательский HTTPStack и установив стек в Volley.newRequestQueue(context, httpStack)
метод залпом.java. Хотя, вам нужно сделать это только для Android версии 16-19. До v16 TLS 1.2 не поддерживается, а после v19 TLS 1.2 включен по умолчанию. Таким образом, вы должны сосредоточиться на ручной настройке TLS на 1.2 для Android версии 16-19.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN
&& Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
try {
ProviderInstaller.installIfNeeded(getContext());
} catch (GooglePlayServicesRepairableException e) {
// Indicates that Google Play services is out of date, disabled, etc.
// Prompt the user to install/update/enable Google Play services.
GooglePlayServicesUtil.showErrorNotification(e.getConnectionStatusCode(), getContext());
// Notify the SyncManager that a soft error occurred.
syncResult.stats.numIOExceptions++;
return;
} catch (GooglePlayServicesNotAvailableException e) {
// Indicates a non-recoverable error; the ProviderInstaller is not able
// to install an up-to-date Provider.
// Notify the SyncManager that a hard error occurred.
syncResult.stats.numAuthExceptions++;
return;
}
HttpStack stack = null;
try {
stack = new HurlStack(null, new TLSSocketFactory());
} catch (KeyManagementException e) {
e.printStackTrace();
Log.d("Your Wrapper Class", "Could not create new stack for TLS v1.2");
stack = new HurlStack();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
Log.d("Your Wrapper Class", "Could not create new stack for TLS v1.2");
stack = new HurlStack();
}
requestQueue = Volley.newRequestQueue(context, stack);
} else {
requestQueue = Volley.newRequestQueue(context);
}
а затем используйте класс TLSSocketFactory, который расширяет SSLSocketFactory как один Флориан Краутан создал здесь, где v1.2 протокол TLS включен: https://gist.github.com/fkrauthan/ac8624466a4dee4fd02f#file-tlssocketfactory-java
на Android используемая версия TLS в основном зависит от используемой версии Android. Apache Volley базируется на Apache Http Client, который базируется на HttpsUrlConnection, поэтому используется стандартный SSL/TLS SSLSocketFactory.
на Android ниже 4.3 обычно поддерживаются только SSLv3 и TLS 1.0. В более поздних версиях TLS 1.1 и 1.2 часто поддерживаются, но отключены.
начиная с Android 5 протоколов TLS 1.1 и TLS 1.2 поддерживается и включено по умолчанию
@w3bshark сработал для меня. Но!--2-->до используя этот код, убедитесь, что вы включили код для обновления Провайдер Безопасности. В моем случае TLS не работал, пока я не обновил поставщика безопасности. Ниже приведен код для его обновления.
private void updateAndroidSecurityProvider() {
try {
ProviderInstaller.installIfNeeded(this);
} catch (GooglePlayServicesRepairableException e) {
Log.e("Test321", "PlayServices not installed");
} catch (GooglePlayServicesNotAvailableException e) {
Log.e("Test321", "Google Play Services not available.");
}
}