- How to install trusted ca certificate on android device?
- Добавляем isrg root x1 в список доверенных сертификатов на android 6.0
- Как установить доверенный сертификат ca на android-устройство? oh! android
- Просмотр сертификатов на android 6.0
- Ручная установка сертификата на устройствах с android 11 | adguard knowledgebase
How to install trusted ca certificate on android device?
Prior to Android KitKat you have to root your device to install new certificates.
From Android KitKat (4.0) up to Nougat (7.0) it’s possible and easy. I was able to install the Charles Web Debbuging Proxy cert on my un-rooted device and successfully sniff SSL traffic.
Extract from http://wiki.cacert.org/FAQ/ImportRootCert
Before Android version 4.0, with Android version Gingerbread & Froyo, there was a single read-only file ( /system/etc/security/cacerts.bks ) containing the trust store with all the CA (‘system’) certificates trusted by default on Android. Both system apps and all applications developed with the Android SDK use this. Use these instructions on installing CAcert certificates on Android Gingerbread, Froyo, …
Starting from Android 4.0 (Android ICS/’Ice Cream Sandwich’, Android 4.3 ‘Jelly Bean’ & Android 4.4 ‘KitKat’), system trusted certificates are on the (read-only) system partition in the folder ‘/system/etc/security/’ as individual files. However, users can now easily add their own ‘user’ certificates which will be stored in ‘/data/misc/keychain/certs-added’.
System-installed certificates can be managed on the Android device in the Settings -> Security -> Certificates -> ‘System’-section, whereas the user trusted certificates are manged in the ‘User’-section there. When using user trusted certificates, Android will force the user of the Android device to implement additional safety measures: the use of a PIN-code, a pattern-lock or a password to unlock the device are mandatory when user-supplied certificates are used.
Installing CAcert certificates as ‘user trusted’-certificates is very easy. Installing new certificates as ‘system trusted’-certificates requires more work (and requires root access), but it has the advantage of avoiding the Android lockscreen requirement.
From Android N onwards it gets a littler harder, see this extract from the Charles proxy website:
As of Android N, you need to add configuration to your app in order to
have it trust the SSL certificates generated by Charles SSL Proxying.
This means that you can only use SSL Proxying with apps that you
control.
In order to configure your app to trust Charles, you need to add a
Network Security Configuration File to your app. This file can
override the system default, enabling your app to trust user installed
CA certificates (e.g. the Charles Root Certificate). You can specify
that this only applies in debug builds of your application, so that
production builds use the default trust profile.
Add a file res/xml/network_security_config.xml to your app:
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
Then add a reference to this file in your app’s manifest, as follows:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config">
</application>
</manifest>
Добавляем isrg root x1 в список доверенных сертификатов на android 6.0
Первым делом нужно установить на телефон PIN-код или графический код. Android 6.0.1 позволяет устанавливать собственные сертификаты только с блокировкой экрана. При отключении PIN-кода или графического кода персональные сертификаты будут удалены (не проверял). В любом случае, при попытке добавить сертификат вас попросят включить блокировку экрана.
Идём в Настройки → Экран блокировки и защита → Тип блокировки экрана. Здесь устанавливаем PIN-код или другой способ блокировки.
Идём в Настройки → Экран блокировки и защита → Другие параметры безопасности.
Мотаем вниз и видим нужные нам пункты:
- Сертификаты безопасности
- Сертификаты пользователя
- Установить из памяти
- Удалить учётные данные
Нажимаем Сертификаты безопасности, находим протухший сертификат Digital Signature Trust Co. (DST Root CA X3) и отключаем его, чтобы телефон не пытался использовать эту цепочку.
Скачиваем сертификат ISRG Root X1 и Let’s Encrypt R3 в формате PEM. Я буду ставить оба сертификата.
Как установить доверенный сертификат ca на android-устройство? oh! android
Я создал свой собственный сертификат CA, и теперь я хочу установить его на устройство Android Froyo (HTC Desire Z), чтобы устройство доверяло моему сертификату.
Android хранит сертификаты CA в своем хранилище ключей Java в /system/etc/security/cacerts.bks . Я скопировал файл на свой компьютер, добавив свой сертификат с помощью portecle 1.5 и вернул его на устройство.
Теперь Android, похоже, не перезагружает файл автоматически. Я прочитал несколько сообщений в блоге, что мне нужно перезагрузить устройство. Это приведет к тому, что файл будет перезаписан оригинальным.
Моя следующая попытка состояла в том, чтобы установить сертификат с SD-карты, скопировав его и используя соответствующую опцию из меню настроек. Устройство сообщает мне, что сертификат установлен, но, видимо, он не доверяет сертификату. Более того, когда я пытаюсь скопировать хранилище ключей на свой компьютер, я все еще нахожу исходный cacerts.bks .
Итак, какой правильный способ установить мой собственный корневой сертификат CA на устройстве Android 2.2 в качестве доверенного сертификата? Есть ли способ сделать это программно?
Теперь с Android 4.0 это возможно. Я легко смог установить сертификат прокси-сервера Charles Web Debbuging на моем ненагруженном устройстве и успешно обнюхать трафик SSL.
Выдержка из http://wiki.cacert.org/FAQ/ImportRootCert
Перед Android версии 4.0 с версией Android Gingerbread & Froyo был доступен единственный файл только для чтения (/system/etc/security/cacerts.bks), содержащий хранилище доверия со всеми сертификатами CA (‘system’), которым по умолчанию доверяли Android. Это и системные приложения, и все приложения, разработанные в Android SDK. Используйте эти инструкции по установке сертификатов CAcert на Android Gingerbread, Froyo, …
Начиная с Android 4.0 (Android ICS / «Ice Cream Sandwich», Android 4.3 «Jelly Bean» и Android 4.4 «KitKat»), системные доверенные сертификаты находятся в системном разделе (только для чтения) в папке «/ system / etc / Security / ‘как отдельные файлы. Тем не менее, пользователи теперь могут легко добавлять свои собственные «пользовательские» сертификаты, которые будут храниться в «/ data / misc / keychain / certs-added».
Системные сертификаты можно управлять на Android-устройстве в разделе «Настройки -> Безопасность -> Сертификаты ->« Система », тогда как доверенные сертификаты пользователя помечены в разделе« Пользователь ». При использовании доверенных сертификатов пользователей Android заставит пользователя Android-устройства реализовать дополнительные меры безопасности: использование PIN-кода, блокировки шаблонов или пароля для разблокировки устройства является обязательным при использовании сертификатов, предоставленных пользователем.
Установка сертификатов CAcert в качестве «доверенных» сертификатов очень проста. Установка новых сертификатов в качестве «системных доверенных» сертификатов требует больше работы (и требует корневого доступа), но имеет преимущество в том, чтобы избежать необходимости блокировки экрана Android.
Если вам нужен ваш сертификат для соединений HTTPS, вы можете добавить файл .bks в качестве необработанного ресурса в ваше приложение и расширить DefaultHttpConnection, чтобы ваши сертификаты использовались для соединений HTTPS.
public class MyHttpClient extends DefaultHttpClient { private Resources _resources; public MyHttpClient(Resources resources) { _resources = resources; } @Override protected ClientConnectionManager createClientConnectionManager() { SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 80)); if (_resources != null) { registry.register(new Scheme("https", newSslSocketFactory(), 443)); } else { registry.register(new Scheme("https", SSLSocketFactory .getSocketFactory(), 443)); } return new SingleClientConnManager(getParams(), registry); } private SSLSocketFactory newSslSocketFactory() { try { KeyStore trusted = KeyStore.getInstance("BKS"); InputStream in = _resources.openRawResource(R.raw.mystore); try { trusted.load(in, "pwd".toCharArray()); } finally { in.close(); } return new SSLSocketFactory(trusted); } catch (Exception e) { throw new AssertionError(e); } } }То, что я сделал, чтобы использовать сертификаты startssl, было довольно просто. (На моем корневом телефоне)
Я скопировал /system/etc/security/cacerts.bks на мою sdcard
Загружены http://www.startssl.com/certs/ca.crt и http://www.startssl.com/certs/sub.class1.server.ca.crt
Пошел на portecle.sourceforge.net и запустил portecle непосредственно с веб-страницы.
Открыл мой файл cacerts.bks с моей SD-карты (ничего не вводил при запросе пароля)
Выберите import в portacle и откройте файл sub.class1.server.ca.crt, в моем случае у него все уже было ca.crt, но, возможно, вам тоже нужно установить его.
Сохраненный хранилище ключей и скопировал его baxck в /system/etc/security/cacerts.bks (я сделал резервную копию этого файла сначала на всякий случай)
Перезагрузите мой телефон, и теперь я могу показать свой сайт, используя сертификат startssl без ошибок.
Существует более простое решение для этого, чем здесь, или в связанных потоках. Если вы используете веб-просмотр (как и я), вы можете добиться этого, выполнив в нем функцию JAVASCRIPT. Если вы не используете веб-просмотр, вы можете создать скрытую для этой цели. Вот функция, которая работает практически в любом браузере (или веб-просмотре) для запуска установки (обычно через общий репозиторий сертификатов os, в том числе на Droid). Он использует хороший трюк с iFrames. Просто передайте URL-адрес в файл .crt для этой функции:
function installTrustedRootCert( rootCertUrl ){ id = "rootCertInstaller"; iframe = document.getElementById( id ); if( iframe != null ) document.body.removeChild( iframe ); iframe = document.createElement( "iframe" ); iframe.id = id; iframe.style.display = "none"; document.body.appendChild( iframe ); iframe.src = rootCertUrl; }ОБНОВИТЬ:
Трюк iframe работает с Droids с API 19 и выше, но более старые версии веб-браузера не будут работать так. Общая идея все еще работает – просто загрузите / откройте файл с помощью веб-браузера, а затем оставьте его. Это может быть более легкое и универсальное решение (в настоящее время java):
public static void installTrustedRootCert( final String certAddress ){ WebView certWebView = new WebView( instance_ ); certWebView.loadUrl( certAddress ); }Обратите внимание, что instance_ является ссылкой на Activity. Это прекрасно работает, если вы знаете URL-адрес сертификата. В моем случае, однако, я решаю это динамически с помощью программного обеспечения на стороне сервера. Мне пришлось добавить достаточный объем дополнительного кода для перехвата URL-адреса перенаправления и вызвать его таким образом, который не вызвал бы сбоя на основе сложности с потоками, но я не буду добавлять сюда эту путаницу …
Просмотр сертификатов на android 6.0
Посмотрим, какие сейчас используются сертификаты. Нажимаем на значок слева от URL — ⓘ. Открывается окно “Незащищённое подключение”.
Для просмотра сертификатов нажимаем ссылку “Данные сертификата”.
Сертификат выдан Let’s Encrypt. Срок действия ещё не вышел. Посмотрим промежуточный сертификат, стрелка вниз.
Видно только промежуточный сертификат R3, выбираем.
Этот сертификат выдан DST Root CA X3, срок действия которого, как мы знаем, истёк. Более того, срок сертификата R3 тоже истёк. И на этом браузер останавливается и не доверяет сайту. А всё потому, что проверка пошла по основной цепочке. Альтернативная цепочка не была задействована, потому что сертификат ISRG Root X1 неизвестен Android.
Ручная установка сертификата на устройствах с android 11 | adguard knowledgebase
Чтобы иметь возможность фильтровать HTTPS-трафик (что крайне важно, так как большинство рекламы использует HTTPS), AdGuard необходимо установить сертификат в пользовательское хранилище сертификатов на вашем устройстве. На более старых версиях Android ОС это можно было сделать автоматически во время первого запуска приложения, либо позднее через настройки, от пользователя требовалась всего пара нажатий. К сожалению, в Android 11 автоматическая установка сертификата более невозможна и теперь требуется ручная установка.

Чтобы вручную установить сертификат AdGuard:
1) Перейдите на главный экран приложения и нажмите на строку Фильтрация HTTPS (она будет подсвечена красным, если требуется установка сертификата).
2) Включите переключатель в верху открывшегося экрана.
3) Появится новый экран, на нём дважды нажмите кнопку Далее и затем Сохранить сейчас, когда вам будет предложено загрузить сертификат AdGuard.
4) После окончания загрузки сертификата вы увидите новый экран. Нажмите кнопку Откройте настройки безопасности.
5) Это вызовет переход в системные настройки. Прокрутите экран вниз до раздела Дополнительно, перейдите в него и далее в раздел Шифрование и учётные данные.
6) Нажмите кнопку Установка сертификатов и затем кнопку Сертификат центра сертификации.
7) Появится окно с предупреждением. Прочитайте его и нажмите Всё равно установить, чтобы продолжить.
8) Выберите только что загруженный сертификат AdGuard. Вы должны увидеть всплывающее уведомление об успешной установке сертификата.
9) Сертификат AdGuard успешно установлен и HTTPS-фильтрация работает!
Если вы обновляете систему с Android 10 до Android 11, есть вероятность, что установленный ранее автоматически сертификат будет принят системой. В противном случае, строчка HTTPS фильтрация на главном экране приложения будет подсвечена красным и вам понадобится установить сертификат вручную по инструкции, приведённой выше.
