Установка не выполнена поскольку не удалось открыть файл сертификата

Обновлено: 06.07.2024

Я создал свой собственный сертификат 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 KitKat вы должны root устройство для установки новых сертификатов.

от Android KitKat (4.0) до нуги (7.0) это возможно и легко. Я смог установить Charles Web Debbuging Proxy cert на мое некорневое устройство и успешно понюхать SSL-трафик.

перед Android версии 4.0, с Android версии пряники & 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 в разделе "Настройки" - > "Безопасность" - > "сертификаты" - > "Система", тогда как доверенные сертификаты пользователя находятся в разделе "пользователь". При использовании user trusted сертификаты, Android заставит пользователя Android устройства реализовать дополнительные меры безопасности: использование PIN-кода, шаблон блокировки или пароль для разблокировки устройства являются обязательными при использовании пользовательских сертификатов.

установка сертификатов CAcert как "доверенных пользователей" - сертификаты очень легко. Установка новых сертификатов как "system trusted" - сертификаты требуют больше работы (и требует корневого доступа), но у него есть преимущество избежать блокировки экрана Android требование.

от Android N и далее это становится немного сложнее, см. Этот экстракт из сайт Charles proxy:

начиная с Android N, вам нужно добавить конфигурацию в свое приложение, чтобы доверяйте SSL-сертификатам, созданным прокси-сервером Charles SSL. Это означает, что вы можете использовать SSL-проксирование только с приложениями, которые вы управление.

чтобы настроить приложение на доверие Чарльзу, вы нужно добавить Файл конфигурации сетевой безопасности в приложении. Этот файл может переопределите системное значение по умолчанию, позволяя приложению доверять установленному пользователю Сертификаты CA (например, корневой сертификат Charles). Можно указать что это применимо только в отладочных сборках вашего приложения, так что производственные сборки используют профиль доверия по умолчанию.

Добавить файл res / xml / network_security_config.xml для вашего приложения:

затем добавить ссылку на этот файл в манифест вашего приложения выглядит следующим образом:

Я потратил много времени, пытаясь найти ответ на это (мне нужен Android, чтобы увидеть сертификаты StartSSL). Вывод: Android 2.1 и 2.2 позволяют импортировать сертификаты, но только для использования с WiFi и VPN. Нет пользовательского интерфейса для обновления списка доверенных корневых сертификатов, но есть обсуждение о добавлении этой функции. Неясно, существует ли надежный обходной путь для ручного обновления и замены cacerts.файл БКС.

проводник связан здесь вероятно, ответит на исходный вопрос без необходимости программирования пользовательского соединителя SSL.

найдено очень подробное руководство по импорту корневых сертификатов, которое фактически позволяет вам устанавливать доверенные сертификаты CA на разных версиях устройств Android (среди других устройств).

в основном вам потребуется:

загрузить: cacerts.файл bks из вашего телефон.

АБР тянуть /системы/и т. д./Безопасность/cacerts в.cacerts в БКС.bks

скачать .файл crt от центра сертификации, который вы хотите разрешить.

изменить cacerts.файл bks на вашем компьютере с помощью Поставщик BouncyCastle

Установка и удаление цифровых сертификатов на Android

Хотя наш терминал готов к работе одновременно с тем, как мы включаем его в первый раз, правда в том, что бывают случаи, когда его безопасность заставляет нас использовать известные цифровые сертификаты. Эта опция доступна на всех Android терминалы и могут быть необходимо для успешного проведения некоторых процедур.

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

Что такое цифровые сертификаты?

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

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

сертификаты android

Если мы зайдем в Настройки / Безопасность / Шифрование и учетные данные, мы можем ознакомиться со всеми этими сертификатами. Как мы говорим, цель состоит в том, чтобы наш терминал может без проблем получить доступ к большому количеству функций. Например, если мы посмотрим на длинный список, мы увидим некоторые из них, такие как «Google Trust Services», отвечающие за работу с сертификатами как Google, так и всего Alphabet.

Как устанавливаются новые сертификаты?

Поскольку все чаще проводить процедуры, требующие обмена конфиденциальной информацией, это Возможно, что в некоторых случаях нам придется установить цифровой сертификат. Например, в Испании это Фабрика национальной валюты и марок, которая действует как «поставщик сертификационных услуг», предоставляя нам различные типы электронных сертификатов, с помощью которых мы можем идентифицировать себя и выполнять формальные процедуры. безопасно через Интернет.

Чтобы установить новые сертификаты, мы должны сначала скачал файл с соответствующего веб-сайта. После этого мы нажимаем на Настройки / Безопасность / Шифрование и учетные данные. Теперь коснемся установки сертификатов из хранилища.

сертификаты на android

В верхней левой части касаемся «установить из хранилища» и выберите место, где мы сохранили сертификат . Трогаем файл и пишем название сертификата. Наконец, мы выбираем VPN, Приложения или Wi-Fi.

  • Сертификаты CA - Это то, что позволяет веб-сайтам, приложениям и VPN шифровать данные.
  • Сертификат пользователя: также известный как сертификат гражданина, это цифровой документ, который содержит наши идентификационные данные. Это позволяет вам идентифицировать себя в Интернете и обмениваться информацией с другими людьми и организациями с гарантией, что только мы и другой собеседник можем получить к ним доступ.
  • Wi-Fi сертификат: позволяет установить сертификат, который дает доступ к частным сетям Wi-Fi с высоким уровнем безопасности, таким как университетский Wi-Fi.

установить сертификаты Android

Удалить личные сертификаты

Возможно, что мы больше не нужен сертификат, или по соображениям безопасности мы хотим отменить его присутствие в нашей системе. В этом случае всегда важно соблюдать осторожность, чтобы не удалить из системы какие-либо сертификаты, которые необходимы для правильной работы телефона. В этом случае мы возвращаемся в Настройки / Безопасность / Шифрование и учетные данные. Затем в хранилище учетных данных мы касаемся «удалить учетные данные» и принимаем.

Прошли те времена, когда мобильные приложения мужественно игнорировали все ошибки, связанные с SSL, и позволяли перехватывать и модифицировать трафик.

image

Автор: Cody Wass

Прошли те времена, когда мобильные приложения мужественно игнорировали все ошибки, связанные с SSL, и позволяли перехватывать и модифицировать трафик. Современные приложения, как минимум, проверяют цепочки сертификатов на валидность и принадлежность к достоверному центру сертификации. Мы, пентестеры, ставим перед собой задачу «убедить» приложение, что сертификат надежный с целью выполнения атаки типа «человек посередине» и последующего изменения трафика. В этой статье будут рассмотрены следующие техники обхода проверок SSL-сертификатов в Android:

  • Добавление сертификатов в хранилище достоверных сертификатов.
  • Перезапись упакованных сертификатов.
  • Использование скрипта Frida для обхода проверок SSL-сертификатов.
  • Изменение кода проверки сертификата.

Некоторые из вышеуказанных техник - простые, другие – более сложные в реализации. Мы рассмотрим каждый из этих методов без особого углубления в специфические детали.

Зачем нужна MITM-атака на SSL

Чтобы просматривать и изменять вызовы веб-службы, используемой мобильным приложением, нам понадобится промежуточный прокси сервер для перехвата, созданный при помощи утилит навроде BurpSuite или ZAP. При перехвате SSL-трафика SSL-соединение прерывается на стороне прокси-сервера. Сертификат, отсылаемый прокси-сервером, анализируется мобильным приложением, как если бы прокси был оконечной точкой веб-службы. По умолчанию самоподписанный сертификат, генерируемые утилитами наподобие Burp, не будет принадлежать проверенной достоверной цепочке. Если сертификат нельзя проверить на достоверность, большинство мобильных будут обрывать соединение вместо того, чтобы подключаться и работать в потенциально незащищенном канале. Техники, представленные ниже, предназначены для одной цели – убедить мобильное приложение, что сертификат, отправляемый прокси-сервером, является достоверным.

Техника 1 – Добавление сертификата в хранилище пользовательских сертификатов

Самый простой способ избежать SSL-ошибок – обзавестись валидным и надежным сертификатом. Эта задача решается относительно просто, если вы сможете установить достоверный сертификат на устройство. Если операционная система доверяет вашему центру сертификации, то будет доверять и сертификату, подписанному центром сертификации.

В Android есть два встроенных хранилища сертификатов, которые отслеживают, каким центрам сертификации доверяет операционная система: системное хранилище (хранит предустановленные сертификаты) и пользовательское хранилище (хранит сертификаты, добавленные пользователями).

Сей факт означает, что, если мы имеем дело с приложением, которое работает в Android 6.0 и более ранних версиях, то можно просто добавить сертификат в пользовательское хранилище. Когда приложение пытается проверить достоверность цепочки для нашего сертификата, то обнаружит, что наш центр сертификации связан с достоверным хранилищем и, следовательно, будет доверять нашему сертификату. В более новых версиях приложение не будет доверять хранилищу пользовательских сертификатов. Чтобы решить эту проблему, нужно прописать такой уровень API и версию Android, чтобы приложение стало доверять пользовательским центрам сертификации. Мы будем редактировать атрибут «platformBuildVersionCode» элемента «manifest» в файле AndroidManifest.xml.

В коде выше в строке «platformBuildVersionCode=25» нужно поменять значение 25 на 23, а в строке platformBuildVersionName="7.1.1" значение 7.1.1 на 6.0.

После переупаковки приложения с обновленным файлом AndroidManifest.xml, доверие пользовательским центрам сертификации будет восстановлено.

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

Техника 2 – Перезапись упакованного сертификата

Если после установки сертификата в пользовательское хранилище, изменении в настройках версии Android и успешном прохождении проверок при просмотре других ресурсов, защищенных протоколом SSL, все равно возникают ошибки, значит, разработчики внедрили дополнительные условия, которым должны удовлетворять достоверные центры сертификации. Если не забыли, в предыдущей технике внутри тэга trust-anchors добавлялся новый путь к сертификату. Подобный трюк может использоваться разработчиками для защиты приложений от перехвата SSL.

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



Рисунок 1: Перечень сертификатов, используемых приложением

Если открыть пакет приложения при помощи, например, APK Studio, то можно сразу увидеть перечень привязанных сертификатов. На картинке выше сертификаты находятся в папке «assets». Замена явно бросающегося в глаза сертификата UniversalRootCA позволит нам подсунуть приложению наш сертификат.

Техника 3 – Подключение к функциям через фреймворк Frida

Если установки собственного сертификата недостаточно для успешного перехвата SSL-трафика, скорее всего, в приложении используются техники навроде SSL pinning или дополнительная SSL-валидация. В этом случае нужно блокировать проверки через непосредственное подключение к соответствующим функциям. Ранее эта техника была доступна для реализации только на устройствах с правами суперпользователя. Однако на данный момент при помощи библиотеки Frida Gadget можно работать с приложением и получить доступ к полному функционалу фреймворка Frida без прав суперпользователя.

Если вы уже выполняли пентесты мобильных приложений, то, вероятно, знакомы с этим фреймворком. Описание всей функциональности Frida выходит за рамки этой статьи, но если говорить в общем, то этот фреймворк позволяет изменять логику работы приложения во время выполнения. Обычно Frida работает как отдельное приложение и требует прав суперпользователя на устройстве. Если у нас нет прав суперпользователя, мы можем инжектировать в пакет приложения динамическую библиотеку Frida Gadget, содержащую большую часть функционала фреймворка Frida. Эта библиотека загружается во время выполнения приложения и позволяет вносить изменения в код.
Чтобы загрузить Frida Gadget, нужно распаковать APK, вставить динамическую библиотеку, отредактировать smali-код так, чтобы динамическая библиотека вызывалась самой первой, а затем переупаковать и установить пакет. Весь этот процесс хорошо задокументирован Джоном Козиракисом (John Kozyrakis). Вначале лучше пройти все этапы вручную, чтобы лучше понять, как работает эта технология. Чтобы сэкономить время, существует утилита - Objection, которая автоматизирует весь вышеупомянутый процесс. Требуется лишь указание целевого пакета, над которым нужно выполнить манипуляции.

После завершения в нашей рабочей директории должен появиться файл «test_app.objection.apk». По умолчанию утилита objection добавляет постфикс «.objection» к имени пакета. Далее мы можем установить этот пакет так же, как и любой другой APK, при помощи команды adb install test_app.objection.apk. После того как измененный пакет установлен на целевом устройстве, во время запуска приложение должно встать на паузу на начальном экране. В этот момент мы можем подключиться к серверу Frida, который отслеживает наше устройство:

C:\>frida-ps -U
PID Name
---- ------
6383 Gadget

[Motorola Moto G (5) Plus::gadget]-> Java.available
true

Alternatively, Objection supports interaction with the listening Frida server by using the ‘explore’ command:

C:\>objection explore
___| |_ |_|___ ___| |_|_|___ ___
| . | . | | | -_| _| _| | . | |
|___|___|_| |___|___|_| |_|___|_|_|
|___|(object)inject(ion) v1.2.2

Runtime Mobile Exploration
by: @leonjza from @sensepost

Теперь вы можете воспользоваться функцией для обхода технологии SSL pinning:

Техника 4 – Реверс-инжиниринг кода верификации сертификата

Возможен такой случай, когда разработчик использует собственные SSL-библиотеки вместо системных для верификации сертификата. В этой ситуации нам нужно распаковать пакет, сконвертировать smali-код в Java-код и найти функции, отвечающие за проверку сертификата.

Если использовать «dex2jar», синтаксис будет следующим:

C:\>d2j-dex2jar.bat "C:\test_app.apk"
dex2jar C:\test_app.apk -> .\test_app-dex2jar.jar

Полученный файл .jar должен быть пригоден для открытия в вашей любимой утилите для исследования Java-приложений (например, JD-GUI).

После того как вы нашли функции, отвечающие за проверку сертификата, можно либо полностью пропатчить код, либо подцепиться к нужной функции при помощи Frida. Чтобы сэкономить время и не пересобирать полностью приложение, эффективнее подцепиться к функциям, отвечающим за проверку сертификата. Шаги, описанные в предыдущей технике, позволят подключиться к приложению, и далее вы можете либо подцепиться к функции при помощи утилит фреймворка Frida, либо при помощи приложения Objection.

Заключение

Техники, описанные в этой статье, позволяют перехватывать SSL-трафик и обходить некоторые наиболее распространенные защиты, используемые разработчиками. Кроме того, я кратко рассказал об утилите Objection и фреймворке Frida. Обход технологии SSL pinning и других защит лишь небольшая часть возможностей, которые позволяют реализовать эти инструменты.

Надеюсь, мне удалось на доступном языке рассказать о техниках, которые могут быть пригодны для оценки безопасности мобильных Android-приложений и демонстрируют важность наличия нескольких способов проведения подобного рода исследований.

вопросы

При использовании КриптоПро ЭЦП Browser plug-in могут возникать ошибки, приводящие к тому, что плагин не работает или работает некорректно, из-за чего электронная подпись не создаётся. Рассмотрим наиболее распространённые варианты ошибок и разберёмся, как их устранить.

При проверке отображается статус «Плагин загружен», но нет информации о криптопровайдере

Не удаётся построить цепочку сертификатов для доверенного корневого центра. (0x800B010A)

Картинка 2

При этой ошибке плагин не может сформировать запрос на создание ЭЦП. Она возникает, если по каким-то причинам нет возможности проверить статус сертификата. Например, если нет привязки к ключу или доступа к спискам отзыва. Также проблема может воспроизводиться, если не установлены корневые сертификаты.

Для устранения этой ошибки нужно привязать сертификат к закрытому ключу.

Сначала проверьте, строится ли цепочка доверия. Для этого нужно открыть файл сертификата, а затем вкладку Путь сертификации.

Ошибки

Если на значке сертификата отображается крест, это означает, что цепочка доверия не строится. В этом случае необходимо скачать и установить корневые и промежуточные сертификаты. Они должны быть доступны для загрузки на сайте удостоверяющего центра, который выпустил сертификат на ваше имя.

Для установки корневого сертификата необходимо:

  • Кликнуть правой кнопкой мыши по файлу.
  • В контекстном меню выбрать пункт Установить сертификат.
  • После запуска Мастера установки нажать Далее.
  • Выбрать вариант Поместить все сертификаты в выбранной хранилище и нажать Обзор.
  • Выбрать в списке хранилищ Доверенные корневые центры сертификации, нажать ОК, затем Далее.
  • Нажать Готово.

Установка промежуточных сертификатов выполняется точно так же, как и установка корневых, за исключением того, что в процессе установки вместо пункта Доверенные корневые центры сертификации нужно выбрать пункт Промежуточные центры сертификации.

Если вы создаёте ЭЦП таких форматов, как CAdES-T или CAdES-X Long Type 1, ошибка может возникать из-за отсутствия доверия к сертификату оператора службы предоставления штампов времени. В этой ситуации нужно установить корневой сертификат УЦ в доверенные корневые центры.

ЭЦП создаётся с ошибкой при проверке цепочки сертификатов

Создание ЭЦП с ошибкой

Данная проблема возникает из-за отсутствия доступа к спискам отозванных сертификатов. Списки должны быть доступны для загрузки на сайте удостоверяющего центра, который выпустил сертификат ЭЦП. Установка списков выполняется по той же схеме, что и установка промежуточного сертификата.

Ошибка несоответствия версии плагина

Данная проблема может возникнуть, если ваш браузер не поддерживает установленную версию плагина. Попробуйте воспользоваться другим обозревателем.

Ошибки 0x8007064A и 0x8007065B

Ошибки 0x8007064A и 0x8007065B

Ошибка возникает в связи с окончанием срока действия лицензий на КриптоПро CSP (КриптоПро TSP Client 2.0, Криптопро OCSP Client 2.0).

Чтобы создать электронную подпись с форматом CAdES-BES, необходима действующая лицензия на КриптоПро CSP. Создание ЭЦП с форматом CAdES-X Long Type 1 потребует наличия действующих лицензий:

  • КриптоПро CSP;
  • КриптоПро OCSP Client 2.0;
  • КриптоПро TSP Client 2.0.

После приобретения лицензии потребуется её активация.

Набор ключей не существует (0x80090016)

Набор ключей не существует

Возникает из-за того, что у браузера нет прав для выполнения операции. Для решения проблемы в настройках плагина добавьте сайт в Список доверенных узлов.

Отказано в доступе (0x80090010)

Отказано в доступе

Возникает в связи с истечением срока действия закрытого ключа. Чтобы проверить срок действия, запустите Крипто-Про CSP, затем откройте вкладку Сервис. Далее необходимо выбрать пункт Протестировать и указать контейнер с закрытым ключом. Если в результатах тестирования вы увидите, что срок действия закрытого ключа истёк, необходимо получить новый ключ.

необходимо получить новый ключ

Ошибка: Invalid algorithm specified. (0x80090008)

Появление такой ошибки означает, что криптопровайдер не поддерживает алгоритм используемого сертификата. Рекомендуется проверить актуальность версии КриптоПро CSP.

Если предлагаемые выше способы устранения ошибок не помогут, рекомендуем обратиться в службу поддержки КриптоПро.

У вас ещё нет электронной подписи? Её можно заказать у нас на сайте. Выберите подходящий вариант ЭЦП: для участия в электронных торгах, работы с порталами или отчётности. Процедура оформления не займёт больше одного дня.

Читайте также: