- Подводные камни HTTPS в Android
- Зацепки
- Рытье
- SSL Server Test (Powered by Qualys SSL Labs)
- A comprehensive free SSL test for your public web servers.
- Решение
- Находки программиста
- среда, 27 мая 2015 г.
- Https в Android: делаем правильно
- 7 комментариев:
- Решение, если у вас с 30.09.2021 не открываются сайты https
- [Решено] Как исправить ошибку «Не удалось установить безопасное соединение» на Android
- Причины, по которым невозможно установить безопасное соединение
- Причина 1 : Проблемы на сайте
- Причина 2 : Слабое подключение к Интернету
- Причина 3 : Сбои в вашем браузере
- Причина 4 : Поврежденные данные и кеши на телефоне Android
- Решения для исправления ошибки «Не удается установить безопасное соединение»
- Решения 1 : Проверить веб-сайт
- Решения 2 : Проверить подключение к Интернету
- Решения 3 : Принудительно остановить браузер
- Решения 4 : Перезапустите браузер
- Решения 5 : Перезагрузить телефон
- Решения 6 : Wipe Cache Partition на Android
- Шаги для входа в режим восстановления с помощью ReiBoot
- Решения 7 : Сброс к заводским настройкам
- Заключительные мысли
- Часто задаваемые вопросы
Подводные камни HTTPS в Android
Проснувшись прекрасным праздничным посленовогодним утром (в два часа дня) я привычным движением подобрал планшет и тыкнул пальцем в мою разработку чтоб посмотреть на картинку Солнца.
Не сказать что я был удивлен, когда вместо диска обнаружилась пустота, все таки данные берутся с https://sdo.gsfc.nasa.gov/ и уже бывало что он был не доступен целиком или в части фотографий. Однако увы в браузере все грузилось и было на месте, более того даже на своем месте, т.е. это не смена url.
Таким образом меня ждал очень интересный день, ибо что может быть лучше чем ловить внезапный баг в уже более месяца опубликованном приложении 🙂
Зацепки
Первое что бросилось в глаза — сайт перешел с http на https.
Второй сюрприз, в версиях android 4.4.2 и выше все работало как надо. Т.е. мне еще повезло что планшет у меня работает на 4.2.
Ну и третье, единственная ошибка в логах: ”Server closed connection”
Рытье
После этого конечно возникло ощущение что какая то беда в протоколах, был нарыт сайт:
SSL Server Test (Powered by Qualys SSL Labs)
A comprehensive free SSL test for your public web servers.
который собственно помог, его основная функция тестирование ssl сайтов, применительно к нашему подопечному https://www.ssllabs.com/ssltest/analyze.html?d=sdo.gsfc.nasa.gov выяснилось что он поддерживает только два протокола: TLS 1.1 и TLS 1.2, что в общем то правильно так как SSL2–3 признаны устаревшими.
И что самое приятное в результатах теста есть часть: “Hadshake Simulation” где сразу видно что сайт нормально работает только с Android 4.4.2 и выше, а так же видна причина, древние версии андроида не работают с протоколами TLS1.1 и 1.2. Затем выяснилось что начиная с android API16 (4.1) данные протоколы встроены, но отключены по умолчанию. И тут мне повезло так как минимальная поддерживаемая версия android моего приложения как раз 4.1.
Решение
Включаем TLS1.1 и TLS1.2
Моя программа стильна модна молодежна 😀 Т.е. написана на kotlin и использует всякие Dagger2, rxJava, Realm, Retrofit2 и т.п. (при этом кстати весит меньше 8Мб)
В данном контексте важно что для поиска и загрузки изображений используется Retrofit2, который в свою очередь использует okHttpClient в котором есть методы для установки своей sslSocketFactory.
Путем гугления https://github.com/square/okhttp/issues/2372 было найдено готовое решение которое на kotlin выглядит следующим образом:
При использовании ProGuard данный класс пришлось добавить в исключения, иначе хоть сборка и проходила без ошибок в процессе исполнения один класс не находил другой
Так как в котлине возможны экстеншены к классам то можно создать такую симпатичную функцию к OkHttpClient.Bilder’у:
Соответственно в коде включение tls выглядит как будто эта функция имеется в самом классе, примерно так:
В этом один из плюсов kotlin, но это уже другая тема.
После этого все заработало как надо.
PS: Небольшая правда уже не сильно полезная ссылка, подробно показывающая какие протоколы в каких версиях андроида используются
Источник
Находки программиста
Решения конкретных задач программирования. Java, Android, JavaScript, Flex и прочее. Настройка софта под Linux, методики разработки и просто размышления.
среда, 27 мая 2015 г.
Https в Android: делаем правильно
To что я опишу ниже — не открытие и не тайна. Это есть даже в официальной документации. Проблема в том, что большинство программистов под Android (и я в том числе) пришли из других, более старых платформ, где проблемы с ssl решались иначе или не возникали вообще.
Например, если сертификат вашего сервера почему-то не в порядке (например он самоподписной), то решение отключить проверку сертификата напрашивается само собой. Такое себе «быстрое решение». В результате вроде бы https и все круто, но на публичном wifi ваш клиент рискует пообщаться по «защищенному» каналу с мошенником. Или, к примеру, вы подключаетесь по ip к своему серверу, а в сертификате прописан домен. Отключаем проверку домена? Давайте не будем спешить. Есть решение которое в «особых» случаях не только не снижает безопасность соединения вашего приложения с сервером но и повышает её до воистину параноидального уровня.
Совсем чуть-чуть теории.
Когда мы устанавливаем https-соединение с сервером, происходит такое себе «рукопожатие», в процессе которого клиент получает публичный ключ сервера. Этот ключ используется для шифрования трафика и для проверки подлинности сервера. Как убедиться что сервер действительно тот, за кого себя выдает? Сертификат, который он предоставляет клиентскому приложению должен быть заверен организацией, чей сертификат есть в системе Android как доверенный и в нём должно быть «зашито» имя домена, соответствующее тому, к которому мы обращаемся. Если мы отключаем проверку, то любой сертификат любого мошенника становится валидным, и вы отправляете ему данные. Он же может общаться с вами, проксируя ваши данные на ваш сервер, который ни о чем не подозревая, обслуживает его как нормального клиента.
Если у вас нет заверенного сертификата, вы можете сгенерировать его себе самостоятельно. Это бесплатно. Но после этого ваше приложение должно доверять этому сертификату «без опоры на авторитеты». Это можно сделать двумя способами: быстрым и правильным. Быстрый — отключить проверку. Правильный: «вшить» публичный ключ вашего сервера в клиентское приложение. Так вы сможете доверять соединению с вашим сервером, не доверяя больше никому, даже самым «супернадежным» сертификатам.
И практика.
Допустим, наш сервер telebank.ru. Он https, причем его сертификат заверен GeoTrust, поэтому мы все ему доверяем. Но допустим, мы хотим принимать его не потому что он заверен кем-то а потому, что он «вшит» в наше приложение. Тогда даже конец света не помешает нам установить защищенное соединение 😉
1. Получим свой публичный ключ:
Из того, что приехало в ответ берём строчки начиная с —BEGIN CERTIFICATE— и заканчивая —END CERTIFICATE—, и сохраняем их в файл, к примеру в telebank.ru.cer. Это и будет наш публичный ключ в base64 представлении.
2. Чтобы работать с ключом, сделаем ему хранилище с помощью BouncyCastle Provider. Скачать его можно, например тут. Скачиваем библиотеку, кладём её рядом с нашим файлом сертификата и выполняем:
И, собственно, наш класс, расширяющий стандартный DefaultHttpClient:
7 комментариев:
Конгениальное решение! Особенно когда завтра у сертификата telebank.ru кончится срок или его перевыпустят по любой другой причине — ваше супергениальное решение немедленно перестанет работать. И пока вас не задолбают благодарные пользователи и вы не перевошьёте другой сертификат — не начнёт. С совершенно валидным сетификатом, подписанным доверенной организацией.
Ваша задача решается куда проще — вы смотрите, доверен ли сертификат и на какой домен он выдан. И неваши домены игнорите. Так вы и используете механизмы подписанных (доверенных) сертификатов, и не разрешаете своему 😉 приложению ходить налево.
Внимательно читая пост, можно заметить что решение предлагается как раз для «особых» случаев, когда сертификат нельзя или нет резона использовать традиционным способом.
Например, ваш сервер используется только как точка доступа для запросов мобильного клиента и не обслуживает браузер в принципе. Зачем покупать для него «совершенно валидный сетификат, подписанный доверенной организацией»?
На счет замены сертификата — этот минус описан, но по-моему замена сертификата раз в несколько лет не должна быть проблемой для мобильного приложения, которое штатно обновляется раз в 2-3 недели.
Ваше решение с проверкой домена — хорошее, но это решение другой задачи. Не пускать приложение «налево» в рамках описанного в посте метода скорее бонус, чем главная цель.
Источник
Решение, если у вас с 30.09.2021 не открываются сайты https
30 сентября 2021 истек срок действия сертификата DST Root CA X3 Let’s Encrypt. Браузеры Google Chrome, Opera и Edge теперь не могут открыть большинство сайтов https. Лишь Mozilla Firefox работает нормально.
Если у вас установлена не Windows, а иная операционная система, попробуйте обратиться за решением к следующей теме на официальном форуме Let’s Encrypt – https://community.letsencrypt.org/t/help-thread-for-dst-root-ca-x3-expiration-september-2021/149190/3
А для Windows простейшим решением будет загрузить сертификат ISRG Root X1 с официального сайта Let’s Encrypt и вручную импортировать его в хранилище доверенных корневых центров сертификации. Для этого:
1. Загрузите версию “Self-signed DER” сертификата ISRG Root X1 со страницы https://letsencrypt.org/certificates/
2. Откройте скачанный вами файл isrgrootx1.der
3. Импортируйте его в хранилище доверенных корневых центров сертификации следующим образом.
Нажмите “Установить сертификат”:
Выберите “Поместить все сертификаты в следующее хранилище”.
Нажмите “Обзор”.
Выберите “Доверенные корневые центры сертификации”:
Если появится сообщение с вопросом, ответьте “Да”.
А через командную строку третий шаг можно выполнить так: certutil -ent -addstore Root isrgrootx1.der
Сегодня читают:
Полезные эко-советы:
Источник
[Решено] Как исправить ошибку «Не удалось установить безопасное соединение» на Android
Мы не можем отрицать тот факт, что в некоторых случаях мы проводим большую часть времени, используя наши телефоны Android. Мы либо играем в игры, либо просматриваем социальные сети, либо загружаем фотографии и видео, либо отправляем важные электронные письма, либо ищем в Интернете ответы на вопросы, которые нас смущают.
Когда мы проводим какое-то исследование чего-либо с помощью наших телефонов, мы часто сталкиваемся с неопределенностями, например, когда мы заходим на веб-сайт, и внезапно появляется сообщение об ошибке: «Не удается установить безопасное соединение». Эта проблема довольно распространена среди пользователей Android, особенно когда вы пытаетесь использовать мобильный браузер и некоторые приложения, которым требуется доступ в Интернет.
Эта ошибка может потенциально беспокоить пользователей Android, особенно когда вы проводите важные исследования для учебы или работы. Это может вызвать задержки в выполнении ваших задач и разрушить ваш график, а это последнее, чего вы хотите.
Чтобы помочь вам расслабиться, мы исследовали возможные причины и проверено возможно решения для решения этого вопроса.
Навигация:
Часть 1. Причины, по которым невозможно установить безопасное соединение
Часть 2: Решения для исправления ошибки «Невозможно установить безопасное соединение»
Причины, по которым невозможно установить безопасное соединение
Чтобы найти идеальное решение для этой ошибки, нам сначала нужно выяснить, что ее вызвало.
Причина 1 : Проблемы на сайте
Есть вероятность, что веб-сайт, на который вы пытаетесь перейти, вниз или переживает некоторые обновления.
Причина 2 : Слабое подключение к Интернету
Для работы большинства веб-сайтов и некоторых приложений требуется подключение к Интернету, в большинстве случаев, если на вашем устройстве нет безопасное сильное интернет-соединение что собой представляет «Не удается установить безопасное соединение» появится.
Причина 3 : Сбои в вашем браузере
Как и любое другое приложение, мобильные браузеры также хранят некоторые дата и кэши во время использования. Эти данные и кеши иногда могут получить поврежден и может вызвать эту досадную ошибку.
Причина 4 : Поврежденные данные и кеши на телефоне Android
Ссылаясь на то, что я упомянул выше, наши телефоны Android также хранят кеши и данные что часто получается поврежден и испортить наши устройства.
Решения для исправления ошибки «Не удается установить безопасное соединение»
Теперь, когда мы выяснили возможные причины этой ошибки, вот несколько важных решений для ее устранения.
Решения 1 : Проверить веб-сайт
Чтобы проверить, вызвана ли проблема веб-сайтом, попробуйте войти на сайт с помощью другой телефон Android. Если веб-сайт отлично работает с другим устройством, обратите внимание на другие решения ниже.
Решения 2 : Проверить подключение к Интернету
Убедитесь, что вы все еще подключены к своему Сеть Wi-Fi или посетите свой роутер, если что-то не так, попробуйте Контакты надежная интернет провайдер чтобы исправить это. Если вы используете мобильные данные, выполните запрос баланса и посмотри, есть ли у тебя еще достаточно данных для подключения к Интернету.
Решения 3 : Принудительно остановить браузер
Если с веб-сайтом и вашим подключением к Интернету все в порядке, проблема может быть вызвана некоторыми сбоями в вашем браузере. Пытаться Принудительно остановите ваш браузер освежить и убрать мелкие глюки. Принудительная остановка отключит работу определенного приложения в фоновом режиме и использование сети на вашем устройстве.
- Откройте Настройки на своем телефоне Android и выберите Управление приложениями .
- Затем выберите свою цель и нажмите Принудительный останов .
- Через несколько секунд перезапустите приложение.
Решения 4 : Перезапустите браузер
Если принудительная остановка браузера не решила «Не удается установить безопасное соединение» ошибка. Вы можете попробовать перезапустить браузер, очистка его кеш и данные которые, возможно, повреждены и являются причиной этой проблемы.
Вот как очистить кеш в вашем браузере.
- Запустите Настройки и выберите Управление приложениями .
- Нажать на Использование хранилища и нажмите Очистить кэш .
- Далее нажмите на Очистить данные .
- Запустите приложение и посмотрите, решит ли это проблему.
Решения 5 : Перезагрузить телефон
После выполнения всех решений для браузера и подключения к Интернету вы все еще сталкиваетесь с «Не удается установить безопасное соединение» ошибка. Вы можете попытаться перезагрузить телефон, чтобы обновить систему и закрыть некоторые приложения, из-за которых ваш телефон мог работать неправильно, что привело к возникновению ошибки.
Сделать это. Нажмите и удерживайте Включения и выберите Перезагрузка / Reboot, ваш телефон автоматически выключится и включится через несколько секунд.
Решения 6 : Wipe Cache Partition на Android
Как я уже упоминал выше, наши телефоны Android хранят временные файлы, которые могут быть повреждены, что приведет к сбою ОС нашего телефона и случайным сбоям приложений и ошибкам, например «Не удается установить безопасное соединение». Очистка раздела кеша может помочь решить эту проблему.
Чтобы стереть раздел кеша на вашем Android, вам нужно будет ввести Режим восстановления. Вход в режим восстановления на некоторых устройствах Android может быть довольно сложным и требует выполнения множества запутанных шагов. К счастью, echoshare ReiBoot для Android здесь, чтобы помочь.
echoshare ReiBoot для Android поможет вам войти и выйти Режим восстановления без проблем одним щелчком мыши. Кроме того, вы также можете легко ввести FastBoot и Один режим на вашем Android с помощью ReiBoot.
ReiBoot также является идеальной программой, если у вас возникают такие проблемы, как черный экран, сбой и зависание приложения, а также Более 50 проблем с Android. Эта удивительная программа предлагает комплексное решение решать все проблемы с телефоном Android с помощью его удобный интерфейс и функция легкого доступа для пользователей.
Шаги для входа в режим восстановления с помощью ReiBoot
Шаг 1: Установить и запустить echoshare ReiBoot для Android .
Шаг 2: Подключите телефон к ПК или ноутбуку с помощью USB-шнур .
Шаг 3: На ReiBoot нажмите Вход в режим восстановления одним щелчком мыши .
Шаг 4: Следуйте USB Debugging шаги, как показано на экране.
Шаг 5: Ваш телефон теперь войдет Режим восстановления .
Шаг 6: Используя кнопку уменьшения громкости, перейдите к Очистить раздел кэша и используйте кнопку питания для выбора.
Шаг 7: Ваш телефон начнет очищать кеш в вашей системе, и через несколько секунд ваш телефон перезагрузится.
Решения 7 : Сброс к заводским настройкам
Если очистка раздела кеша на вашем устройстве не решила проблему, мы рекомендуем вам попробовать Сброс всех настроек Ваш телефон. Тем самым все неправильные конфигурации, поврежденные файлы которая могла вызвать эту проблему, будет удаленный и вернуть телефон в по умолчанию.
У разных производителей и моделей телефонов есть разные способы восстановления заводских настроек. В этом руководстве я использую Oppo A5s. Если вы найдете кнопки, о которых я упоминал, ознакомьтесь с инструкцией по эксплуатации телефона или посетите официальный сайт бренда.
- Откройте «Настройки», затем прокрутите вниз и нажмите Система.
- Нажмите Дополнительно кнопка и ударил Параметры сброса , это восстановит параметры сети.
- клещ Стереть все данные (сброс к заводским настройкам) вариант. Появится подтверждающее сообщение, напоминающее вам, что все ваши данные будут удалены. Если вы хотите продолжить, нажмите на Сбросить телефон .
- Появится второе подтверждение сообщения, если вы хотите продолжить, нажмите Стереть все .
- ВЕСЬ Ваш пароль или пин-код будет запрошен в целях безопасности, просто введите его, чтобы продолжить.
- После этого ваш телефон перезагрузится, и это может занять несколько минут. Когда все будет готово, взгляните на свой телефон и посмотрите, сохраняется ли проблема.
Заключительные мысли
Очень важно поддерживать наши телефоны в хорошей форме, мы используем их каждый день, и большинство из нас полагается на наши телефоны при выполнении важных задач. Поэтому, если вы столкнулись с ошибкой «не удается установить безопасное соединение», попробуйте решения, которые мы перечислили выше, и мы надеемся, что они помогут вам исправить ваше устройство в кратчайшие сроки.
Часто задаваемые вопросы
1. Почему мой Wi-Fi продолжает отключаться?
Если ваш телефон Android часто отключается от сети Wi-Fi или точки доступа Wi-Fi, это может быть связано с проблемами с маршрутизатором, устройством точки доступа или самим телефоном.
2. Почему он продолжает говорить, что мое соединение не защищено?
Ошибка «ваше соединение не защищено» означает, что ваш браузер не может проверить, безопасно ли посещение веб-сайта. Ваш браузер выдает это предупреждающее сообщение, чтобы помешать вам посетить этот сайт, поскольку посещение небезопасного сайта может поставить под угрозу вашу личную информацию.
Источник