Сценарий
Я получал исключения SSLHandshake на устройствах с версиями Android ранее Android 5.0. В моем случае я также хотел создать TrustManager, чтобы доверять моему клиентскому сертификату.
Я внедрил NoSSLv3SocketFactory и NoSSLv3Factory , чтобы удалить SSLv3 из списка моих клиентов поддерживаемых протоколов, но я не мог заставить ни одно из этих решений работать.
Некоторые вещи, которые я узнал:
Что сработало для меня
Разрешить безопасность Android Provider
для обновления при запуске ваше приложение.
Поставщик по умолчанию до 5.0+ не отключает SSLv3. При условии, что у вас есть доступ к сервисам Google Play, относительно просто исправить провайдера безопасности Android из вашего приложения.
private void updateAndroidSecurityProvider(Activity callingActivity) {
try {
ProviderInstaller.installIfNeeded(this);
} catch (GooglePlayServicesRepairableException e) {
// Thrown when Google Play Services is not installed, up-to-date, or enabled
// Show dialog to allow users to install, update, or otherwise enable Google Play services.
GooglePlayServicesUtil.getErrorDialog(e.getConnectionStatusCode(), callingActivity, 0);
} catch (GooglePlayServicesNotAvailableException e) {
Log.e("SecurityException", "Google Play Services not available.");
}
}
Если теперь вы создаете свой OkHttpClient или HttpURLConnection, TLSv1.1 и TLSv1.2 должны быть доступны как протоколы и SSLv3 должны быть удалены. Если клиент / соединение (или, более конкретно, SSLContext) было инициализировано до вызова ProviderInstaller.installIfNeeded(...)
, то его нужно будет воссоздать.
Не забудьте добавить следующую зависимость (найденная последняя версия здесь ):
compile 'com.google.android.gms:play-services-auth:11.8.0'
Источники:
Помимо
мне не нужно явно устанавливать, какие алгоритмы шифрования мой клиент должен использовать, но я нашел сообщение SO, рекомендующее те, которые считаются наиболее безопасными на момент написания: Какие Cipher Suites включить для SSL Socket?
Вы можете использовать компонент tFileList для итерации файлов в указанном исходном каталоге и компонент tFileCopy для перемещения файлов, как показано ниже. Убедитесь, что имя файла выбрано из tFileList, как показано, и что выбран вариант «Удалить исходный файл», чтобы удалить файл из исходного каталога. Надеюсь, это поможет.