Android browser with ssl

Android – работа с ssl-сертификатами (как организовать передачу данных через HTTPS)

Что делать, если необходимо получать данные в андроиде через защищенное https-соединение? Почему генерируется ошибка SSLException: Not trusted server certificate ? Как добавить сертификат с сервера в локальное хранилище ключей на андроид-устройстве? Если вас волнуют эти вопросы – вам будет полезна инструкция для установки ssl сертификатов и сниппет кода для их загрузки в ваше андроид-приложение.

1. Как узнать, что за сертификат используется сервером (На Linux/Mac Os – как правило, пакет openssl предустановлен, для Windows – актуальные ссылки в разделе бинарниики там):

openssl s_client -connect :

для самоподписанных сертификатов выведется нечто вроде:

если используется сертификат, подписанный сторонней компанией – будут отображены координаты, по которым можно раздобыть публичный сертификат

2. Создаем файл сертификата

А). Для самоподписанного сертификата:

1. создать пустой файл my-certificate-file.pem

2. скопировать в новый файл закодированные данные сертификата:

да, открывающий\закрывающий теги должны быть.

Если сертификат самоподписанный можно использовать данный bash-script

echo | openssl s_client -connect :

2>/dev/null | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p’ > my-certificate-file.pem

Б). Если сертификат используемый сервером подписан сторонней организацией, на предыдущем шаге мы увидим ее контакты по которым его можно запросить. Почитать про разные типы сертификатов и попробовать онлайн-конвертер из одного типа в другой можно тут – https://www.sslshopper.com/ssl-converter.html

3. Создаем файл-хранилище с этим единственным ключом:

keytool -import -v -trustcacerts -alias myalias -file /bcprov-jdk16-146.jar -storepass

-alias myalias – псевдоним для работы с сертификатом

-keystore mystore.bks – говорим какой файл создать для хранения этого сертификата

-storetype BKS – android поддерживает такой тип хранилища, для того чтобы сгенерировать, его мы должны добавить в наш java CLASSPATH соответствующий jar-файл, последнюю версию которого можно взять отсюда – http://www.bouncycastle.org/latest_releases.html

для создания хранилища необходимо отдельно указать поставщика данного типа хранилища, а также путь к java-классу его реализующего.

(если этого не сделать появляется ошибка: keytool error: java.security.KeyStoreException: BKS not found )

4. Файл-хранилище мы можем добавить себе в проект чтобы использовать на этапе тестирования – например в папку assets. В обычном режиме работы, очевидно, его необходимо считывать из определенной директории для того чтобы работать с актуальной версией сертификата.

5. В android-приложении пригодится следующий сниппет кода:

1 этап – загружаем файл-хранилище с нашим сертификатом:

В реальном приложении, очевидно, файл необходимо будет считывать из предопределенной директории.

2 этап – создаем фабрику управления доверительными соединениями, она будет использоваться для проверки сертифкатов всех https соединений (я еще раз подчеркиваю – ВСЕХ)

После загрузки нашего хранилища ключей мы создаем фабрику для управления доверенными соединениями на основе этого хранилища. С помощью этой фабрики получаем экземпляр менеджера соединений специфичного для ssl (X509TrustManager) и инициализируем объект SSLContext, который будет использоваться для создания защищенного соединения.

3 этап – указываем какие настройки будут использоваться при установлении защищенных соединений:

После этого, если вы все сделали правильно, при каждом https соединении будут вызываться соотвествующие проверки, использующие подготовленный файл хранилище.

UPDATE 26.09.2012:

Хорошая статья по теме использования собственных сертификатов безопасности:

UPDATE 04.10.2012:

С помощью одной целеустремленной читательницы удалось приоткрыть завесу тайны над ошибкой: “SSL handshake terminated: ssl=0x1fcf30: Failure in SSL library, usually a protocol error” возникающей при попытке использовать двусторонюю аутентификацию – т.е. если не только клиент проверяет подлинность сервера но и сервер, проверяет что за клиент к нему лезет.

Источник

Android browser with ssl

Краткое описание:
Браузер направленный на безопасность и конфиденциальность.

У Privacy Browser две основные цели:

1. Минимизация информации, которая отправляется в интернет.

2. Минимизация информации, которая хранится на устройстве.

Большинство браузеров скрытно предоставляют веб-сайтам огромное количество информации, которая позволяет им отслеживать вас и нарушать вашу конфиденциальность. Сайты и рекламные сети используют JavaScript, файлы cookie, DOM-хранилище, пользовательские агенты и многие другие технологии для уникальной идентификации каждого пользователя и его отслеживания при просмотре интернета.

Поэтому чувствительные к конфиденциальности функции отключены в Privacy Browser по умолчанию. Если одна из этих технологий необходима для корректной работы веб-сайта, пользователь может включить ее только для этого визита. Кроме того, можно использовать настройки домена, чтобы автоматически включать некоторые функции при входе на определенный веб-сайт и снова отключать их при выходе.

В настоящее время для отображения веб-страниц в Privacy Browser используется встроенный в Android компонент WebView, поэтому наилучшие результаты работы браузера можно получить, используя последнюю версию этого компонента (см. https://www.stoutner.c…mmon-settings/webview/). Начиная с версии 4.x Privacy Browser будет переключен на форк WebView под названием Privacy WebView, что позволит использовать более продвинутые функции обеспечения конфиденциальности.

Внимание: Android KitKat (версия 4.4.x, API 19) поставляется со старой версией OpenSSL, которая подвержена атакам MITM (человек посередине) при просмотре веб-сайтов, использующих устаревшие протоколы и наборы шифров. Более подробную информацию по данному вопросу можно получить на сайте https://www.stoutner.c…kat-security-problems/.

Возможности:
• Встроенная блокировка рекламы EasyList.
• Поддержка прокси Tor Orbot.
• Закрепление SSL-сертификата.
• Импорт/экспорт настроек и закладок.

Требуется Android: 4.4 и выше
Русский интерфейс: Есть

3.8 (код версии 55)

24 мая 2021 года — минимальный API 19, целевой API 30

  • Добавлена возможность перемещения панели приложения в нижнюю часть.
  • Реализовано сохранение веб-архивов.
  • Появилась возможность использования внешнего приложения для загрузки файлов.
  • Добавлены дополнительные ссылки для открытия альтернативных менеджеров загрузки.
  • В список поисковых систем добавлена Monocles.
  • Из приложения удалено управление заголовком «Не отслеживать» и сторонними файлами cookie.
  • Добавлена возможность открытия контента URL из сторонних приложений.
  • Обработку URL-контента и ненадежных SSL-сертификатов теперь можно осуществлять в разделе просмотра исходного кода.
  • Исправлены зависания интерфейса приложения на некоторых устройствах.
  • Устранены несколько редких сбоев.
  • Внесены незначительные изменения в пользовательский интерфейс.
  • Обновлены переводы на русский, бразильский португальский, французский, немецкий, итальянский, испанский.

3.7 (код версии 54)

29 марта 2021 года — минимальный API 19, целевой API 29

  • Выполнен редизайн доступа к файлам для работы с ограниченными по масштабу хранилищем и фреймворком доступа к хранилищу. Это позволило увеличить целевой API до 30 и исключить необходимость в опасных разрешениях READ_EXTERNAL_STORAGE и WRITE_EXTERNAL_STORAGE. К сожалению, из-за ошибки в Android WebView временно отключена возможность сохранения веб-архива.
  • Обновление раздела О Privacy Browser > Разрешения.
  • Увеличена информативность панели при сохранении URL.
  • В список поисковых систем добавлен Metager.
  • Исправлено обнаружение I2P.
  • Исправлено выравнивание значков и кнопок в диалоговых окнах.
  • Адресная строка теперь будет обновляться при переключении вкладок даже если в ней происходит редактирование.
  • Разрешено отображение пароля в диалоговом окне HTTP-аутентификации.
  • Исправлено несколько некритичных и редких сбоев.
  • Исправлено превращение значка гамбургера в стрелку, если панель была открыта и выполнен перезапуск приложения.
  • Меню параметров теперь открывается быстрее.
  • Обновлен перевод на русский язык.
  • Обновлен перевод на бразильский португальский язык, французский, немецкий, итальянский, испанский.

3.6 (код версии 52)

16 Ноябрь 2020 года — минимальный API 19, целевой API 29

  • Исправлено воспроизведение буферизованного звука после закрытия вкладки.
  • Доверие пользовательским сертификатам авторизации на Android 7 (API 24) и новее.
  • Разрешено сохранять данные URL-адреса.
  • На панель приложения добавлен новый значок для открытия панели закладок.
  • Использование одного исходного файла для дневного и ночного вариантов отображения Руководства и О Privacy Browser.
  • Исправлена проблема импорта настроек из версий до 3.3.
  • Исправлены пользовательские заголовки, не применяемые к ссылкам, загруженным внутри WebView.
  • Теперь для редактирования закладок в активности закладок достаточно одного касания.
  • Исправлена проблема, связанная с редактированием закладок, в случае, если была выбрана одна неправильная.
  • Добавлено отображение использования памяти в О Privacy Browser > Версия.
  • Добавлены возможности сохранения, копирования и отправки email в О Privacy Browser > Версия.
  • Добавлено использование Content-Type для определения неизвестного расширения файла.
  • Очистка logcat после каждой загрузки страницы в режиме инкогнито.
  • Очистка logcat после выбора Очистить и выйти.
  • Исправлена ошибка, из-за которой закрепленные SSL-сертификаты иногда сверялись с предыдущим сертификатом веб-сайта.
  • Добавлена запись Mastodon в О Privacy Browser > Ссылки.
  • Сделаны различные незначительные улучшения для лучшего пользовательского опыта и графического интерфейса.
  • Частичный перевод на бразильский португальский (Thiago Nazareno Conceição Silva de Jesus).
  • Обновлен перевод на русский язык, французский язык (Kévin LE FLOHIC), немецкий язык (Bernhard G. Keller), итальянский язык (Francesco Buratti), испанский язык (выполнен Хосе А. Леоном).
  • 3.5.1 (код версии 51)

    28 августа 2020 года — минимальный API 19, целевой API 29

    • Fix a bug that caused new intents (links from other apps) to not load if Privacy Browser had been killed by the OS in the background
    • Fix a bug that caused the app to initialize incorrectly if the app theme was set to the opposite of the OS theme.

    3.5 (код версии 50)

    18 августа 2020 года — минимальный API 19, целевой API 29

    • Внедрена недавно появившаяся в Android тема День/Ночь.
    • Начните использовать недавно появившуюся в WebView встроенную темную тему.
    • Сохранение и восстановление состояния при перезапуске Privacy Browser в фоновом режиме операционной системой.
    • Для получения имен файлов при скачивании теперь используется заголовок Content-Disposition.
    • Исправлена загрузка файлов на некоторых сайтах.
    • Добавлена Mojeek и удалены Qwant и Searx из списка поисковых систем.
    • Устранена ошибка, при которой иногда срабатывала опция «потянуть для обновления», даже если она была отключена.
    • Переопределен порядок контекстных меню.
    • Применяйте пользовательские заголовки к ссылкам, загруженным из WebView.
    • Обновлен перевод на русский язык.
    • Обновлен перевод на французский язык (Kévin LE FLOHIC), немецкий (Bernhard G. Keller), итальянский язык (Francesco Buratti), испанский язык (Jose A. León).

    3.4
    • Менеджер загрузок Android заменен на собственную реализацию.
    • Добавлена опция указания места скачивания по умолчанию.
    • Загрузки теперь выполняются с использованием прокси.
    • Теперь при переключении прокси вкладки перезагружаются.
    • Добавлена возможность сохранить неочищенный URL.
    • Добавлено предупреждение о том, что при сохранении существующий файл будет перезаписан.
    • Добавлен пункт меню «Опции закладок». Для доступа к нему используйте жестовый интерфейс Android 10.
    • Изменен порядок расположения опций в меню для предотвращения случайного создания настроек домена.

    3.3 (код версии 47)

    • Добавлена поддержка пользовательских прокси, включая SOCKS-прокси, и I2P.
    • Сокращено название приложения в лаунчере.
    • Privacy Browser теперь не отображается в списке последних приложений при закрытии с помощью кнопки «Назад».
    • Сохранение настроек «на лету» во время навигации по истории.
    • Разрешен любой размер шрифта.
    • Добавлена опция сохранения веб-сайтов как MHT-архивов.
    • Добавлена опция открытия локальных файлов.
    • В контекстное меню добавлена опция открытия в фоновом режиме.
    • Добавлена опция открытия закладок в новой вкладке.
    • Добавлена возможность отключения тайм-аута экрана при воспроизведении видео в полноэкранном режиме.
    • Отключен HSTS.
    • Обновление View Source для использования заголовков Sec-Fetch.
    • Обновлен перевод на русский язык, и другие.
    • Повышен API до 29 (Android 10).

    3.2
    • Поисковая система и домашняя страница по умолчанию изменены на Startpage.
    • Исправлено проксирование через Orbot в последних версиях WebView.
    • Создан список UltraList.
    • Исправлена проблема со списками блокировок, иногда приводившая к блокировке основного URL-адреса сайта.
    • Обновлена модификация URL-адресов Facebook.
    • Исправлена проблема с настройками доменов, при навигации по истории.
    • Отключен таймаут подсветки экрана при просмотре полноэкранного видео.
    • Добавлен виброотклик экрана и уп

    2.8:

    • Use the public download directory (requires write storage permission).
    • Add controls for the block liststo domain settings.
    • Support launching other apps using custom URLs.
    • Add a bookmarks tab to the guide.
    • Create an adaptive icon.
    • Preserve the favorite icon when returning from the settings or domains activities.
    • Add a warning that Incognito Mode disables forward and back navigation.
    • Allow cookies to be saved when Incognito Mode is enabled.
    • Don’t reload the webpage when restarting from the launcher.
    • Partially updated German translation provided by Stefan Erhardt.
    • Updated Italian translation provided by Francesco Buratti.
    • First complete Russian translation.
    • Updated Spanish translation provided by Jose A. León Becerra.

    2.8.1:
    • Add an options menu item to create/edit domain settings for the current domain.
    • Open telephone number hyperlinks in the dialer.
    • Fix a build error that prevented the release of 2.7 and 2.7.1 on F-Droid.
    • Updated Italian translation provided by Francesco Buratti.
    • Updated Spanish translation provided by Jose A. León Becerra.

    В Google Play он стоит 1$. Но в F-Droid он бесплатный (И без рекламы).

    Источник

    Читайте также:  Как экономить заряд батареи андроида
    Оцените статью