Как установить собственные сертификаты в хранилище системных сертификатов?

#java #android #security

#java #Android #Безопасность

Вопрос:

Я хотел бы разработать собственный API для Android, который будет запрашивать уровень защиты «Подписи» и будет доступен для «моих» приложений.

Идея заключается в следующем:

  1. «установить» мой собственный сертификат в хранилище системных сертификатов
  2. подпишите «доверенное» приложение с помощью моего собственного сертификата

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

Я собираюсь создать прототип этого подхода, но если есть что-то очевидное, что может помешать мне сделать это — пожалуйста, дайте мне знать.

Вопрос:

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

Большое вам спасибо.

P.S. я не очень хорошо знаком с разработкой на Java / Android, поэтому, пожалуйста, не возражайте, если увидите что-то странное.

Обновить:

Как я писал в комментарии к ответу zeetoobiker, если я подпишу свой API своим собственным сертификатом, он будет доступен для всех моих приложений (подписанных моим сертификатом), но у него не будет никаких системных разрешений. И я не хочу, чтобы все мои «клиенты» переходили к «realmb.com/droidCert /» веб-сайт. Вместо этого я хочу, чтобы производитель добавил мой сертификат в ОС, сейчас я работаю над подтверждением концепции.

Ответ №1:

Я не думаю, что вам нужно устанавливать сертификат.

Из документов о разрешениях для подписи:

Разрешение, которое система предоставляет, только если запрашивающее приложение подписано тем же сертификатом, что и приложение, которое объявило разрешение. Если сертификаты совпадают, система автоматически предоставляет разрешение без уведомления пользователя или запроса явного одобрения пользователя.

Это означает, что это сертификат, который вы используете для подписи приложений, которые имеют значение (а не какие-либо установленные сертификаты) — если вы подпишете приложение 1 и приложение 2 одним и тем же сертификатом, у него будет разрешение. Если приложение 3, подписанное другим сертификатом, попытается получить доступ к API, то оно получит исключение без разрешения.

Согласно документам (я должен признать, что я этого не делал, хотя я смотрю на некоторые из моих приложений), он должен работать на ванильном Android без каких-либо необходимых настроек / доступа к устройству / root.

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

Комментарии:

1. Привет, Zeetoobiker, спасибо за отзыв. Причина, по которой мне нужно установить свой собственный сертификат в системное хранилище, заключается в том, что я хочу, чтобы мой API имел некоторые системные разрешения. Если я подпишу свой API своим собственным сертификатом, он будет доступен для всех моих приложений (подписанных моим сертификатом), но у него не будет никаких системных разрешений. И я не хочу, чтобы все мои «клиенты» переходили к » realmb.com/droidCert » веб-сайт. Вместо этого я хочу, чтобы производитель добавил мой сертификат в ОС, сейчас я работаю над подтверждением концепции.

2. Пожалуйста, сообщите, знаете ли вы, как установить корневой сертификат в ОС (на этапе компиляции). Большое вам спасибо!

3. Извините, я не предлагал специально перейти на веб-сайт, но веб-сайт (хотя и предоставляет способ его достижения) показывает, как вы могли бы его добавить — по общему признанию, это означает предоставление его системному браузеру для загрузки и установки (это может быть с самого устройства).

4. Под API вы подразумеваете небольшое приложение с невизуальным интерфейсом, которое предоставляет API другим приложениям? Я предполагаю, что вы делаете — если вы имеете в виду что-то другое, то не могли бы вы объяснить это немного подробнее? Потому что, если вы имеете в виду, что тогда приложение API может иметь любое системное разрешение, которое вы хотите, вам просто нужно запросить это в манифесте.

5. Предполагается, что мой API (давайте лучше назовем его библиотекой, а не визуальным приложением) должен иметь доступ к другим системным приложениям, таким как электронная почта Google, календарь и т.д. Да, я знаю, что могу запросить разрешения системного уровня для своей библиотеки через манифест. И мне также нужно будет подписать свою библиотеку системным сертификатом (чтобы быть частью системы, это нормально). Но я также хочу 2 вещи: 1) мое приложение не должно быть подписано системным сертификатом (именно поэтому я хочу установить свой собственный сертификат в системное хранилище); 2) только приложение, подписанное моим сертификатом, должно иметь доступ к моей библиотеке.