Я создал свой собственный сертификат CA и теперь хочу установить его на свое устройство Android Froyo (HTC Desire Z), чтобы устройство доверяло моему сертификату.
Android хранит сертификаты CA в своем хранилище ключей Java в /system/etc/security/cacerts.bks
. Я скопировал файл на свой компьютер, добавил сертификат с помощью portecle 1.5 и перенес его на устройство.
Похоже, что Android не загружает файл автоматически. Я прочитал в нескольких сообщениях в блоге, что мне нужно перезагрузить устройство. Это приводит к тому, что файл снова перезаписывается на исходный.
Моей следующей попыткой было установить сертификат с SD-карты, скопировав его и воспользовавшись соответствующей опцией в меню настроек. Устройство сообщает мне, что сертификат установлен, но, видимо, он не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на мой компьютер, я все еще нахожу исходный запас cacerts.bks
.
Итак, как правильно установить собственный сертификат корневого ЦС на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?
источник
Ответы:
До Android KitKat вам нужно получить root права на ваше устройство для установки новых сертификатов.
От Android KitKat (4.0) до Nougat (7.0) это возможно и просто. Я смог установить сертификат Charles Web Debbuging Proxy на свое нерутированное устройство и успешно перехватывать SSL-трафик.
Выдержка из http://wiki.cacert.org/FAQ/ImportRootCert
Начиная с Android N, становится все сложнее, посмотрите на этот фрагмент с сайта прокси Чарльза :
Добавьте файл res / xml / network_security_config.xml в свое приложение:
Затем добавьте ссылку на этот файл в манифест вашего приложения следующим образом:
источник
/system/etc/security/cacerts/*.0
) не сохраняются после перезагрузки / перезапуска AVD, поэтому это решение не было успешным.debug-overrides
, означает ли это, что этоnetwork_security_config
только вариант отладки таргетинга? Если у меня есть другой вариант, такой как вариант UAT, то это не будет работать?Я потратил много времени, пытаясь найти ответ на этот вопрос (мне нужен Android, чтобы увидеть сертификаты StartSSL). Вывод: Android 2.1 и 2.2 позволяют импортировать сертификаты, но только для использования с WiFi и VPN. Пользовательский интерфейс для обновления списка доверенных корневых сертификатов отсутствует, но обсуждается вопрос о добавлении этой функции. Неясно, существует ли надежный обходной путь для ручного обновления и замены файла cacerts.bks.
Подробности и ссылки: http://www.mcbsys.com/techblog/2010/12/android-certificates/ . В этом посте см. Ссылку на ошибку Android 11231 - вы можете добавить свой голос и запросить эту ошибку.
источник
Если вам нужен сертификат для соединений HTTPS, вы можете добавить файл .bks в качестве необработанного ресурса в свое приложение и расширить DefaultHttpConnection, чтобы ваши сертификаты использовались для соединений HTTPS.
источник
Связанное здесь руководство , вероятно, ответит на исходный вопрос без необходимости программирования настраиваемого коннектора SSL.
Нашел очень подробное руководство по импорту корневых сертификатов, которое на самом деле поможет вам установить доверенные сертификаты CA на разные версии устройств Android (среди других устройств).
В основном вам необходимо:
Загрузите: файл cacerts.bks со своего телефона.
adb pull /system/etc/security/cacerts.bks cacerts.bks
Загрузите файл .crt из удостоверяющего центра, который вы хотите разрешить.
Измените файл cacerts.bks на вашем компьютере с помощью BouncyCastle Provider.
Загрузите файл cacerts.bks обратно на свой телефон и перезагрузитесь.
Вот более подробные пошаговые инструкции по обновлению более ранних версий телефонов Android: Как обновить хранилище ключей центра сертификации безопасности HTTPS на устройстве до версии Android 4.0
источник
Для этого есть НАМНОГО более простое решение, чем опубликованное здесь или в связанных темах. Если вы используете веб-просмотр (как и я), вы можете добиться этого, выполнив в нем функцию JAVASCRIPT. Если вы не используете веб-просмотр, вы можете создать для этой цели скрытый. Вот функция, которая работает практически в любом браузере (или веб-просмотре), чтобы запустить установку CA (обычно через общий репозиторий сертификатов os, в том числе на Droid). Он использует хороший трюк с iFrames. Просто передайте этой функции URL-адрес файла .crt:
ОБНОВИТЬ:
Трюк с iframe работает на дроидах с API 19 и выше, но старые версии веб-просмотра не будут работать так. Однако общая идея все еще работает - просто загрузите / откройте файл с помощью веб-просмотра, а затем позвольте операционной системе взять на себя управление. Это может быть более простое и универсальное решение (сейчас в реальной java):
Обратите внимание, что instance_ - это ссылка на Activity. Это отлично работает, если вы знаете URL-адрес сертификата. В моем случае, однако, я решаю это динамически с помощью серверного программного обеспечения. Мне пришлось добавить изрядное количество дополнительного кода, чтобы перехватить URL-адрес перенаправления и вызвать его таким образом, чтобы не вызвать сбоя из-за сложности потоковой передачи, но я не буду добавлять сюда всю эту путаницу ...
источник
Что я сделал, чтобы использовать сертификаты startssl, было довольно просто. (на моем рутированном телефоне)
Я скопировал /system/etc/security/cacerts.bks на свою SD-карту
Загружено http://www.startssl.com/certs/ca.crt и http://www.startssl.com/certs/sub.class1.server.ca.crt
Зашел на portecle.sourceforge.net и запустил portecle прямо с веб-страницы.
Открыл мой файл cacerts.bks с моей SD-карты (ничего не ввел при запросе пароля)
Выберите импорт в портакле и откройте sub.class1.server.ca.crt, в моем случае он уже имел ca.crt, но, возможно, вам также нужно установить его.
Сохранил хранилище ключей и скопировал его baxck в /system/etc/security/cacerts.bks (на всякий случай я сделал резервную копию этого файла)
Перезагрузил свой телефон, и теперь я могу без ошибок заходить на свой сайт, используя сертификат startssl.
источник
Эти шаги работали для меня:
В качестве альтернативы я нашел следующие варианты, которые мне не нужно было пробовать самому, но которые выглядели простыми:
Наконец, это может быть неактуальным, но если вы хотите создать и настроить самозаверяющий сертификат (с помощью mkcert) для своего приложения (веб-сайта) PWA, размещенного на локальном веб-сервере IIS, я следил за этой страницей:
https://medium.com/@aweber01/locally-trusted-development-certificates-with-mkcert-and-iis-e09410d92031
Спасибо и надеюсь, что это поможет !! :)
источник
Вот альтернативное решение, которое фактически добавляет ваш сертификат во встроенный список сертификатов по умолчанию: Доверять всем сертификатам с помощью HttpClient через HTTPS
Однако это будет работать только для вашего приложения. Невозможно программно сделать это для всех приложений на устройстве пользователя, поскольку это может представлять угрозу безопасности.
источник
Если у вас есть рутированное устройство, вы можете использовать модуль Magisk для перемещения пользовательских сертификатов в систему, чтобы он стал доверенным сертификатом.
https://github.com/yochananmarqos/Move-Certificates
источник