Основные положения электронной подписи приложений

👁 174 просмотров
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

  1. Основные положения электронной подписи приложений
  2. Способы генерации ключей подписи и хранилища ключей
  3. Разница между хранилищами *.jks и *.keystore
  4. Ручная подписка APK
  5. Подписка APK на Google Play
  6. Соображения подписи, безопасности и удаление подписки из сборки APK
  7. Автоматизация процесса подписи на этапе сборки APK
  8. Автоматизация подписи гибридных приложений Android

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

Сертификаты и хранилища ключей

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

Когда файл APK подписывается, то инструмент подписи прикрепляет сертификат публичного ключа к приложению с расширением APK. Сертификат публичного ключа обслуживается также, как и отпечаток пальца(«fingerprint» ), который уникально ассоциируется с распространяемым приложением APK и с соответствующему приватному ключу владельца APK. Это помогает Android гарантировать, что будущие обновления приложения с форматом APK можно будет аутентифицировать(владелец может авторизироваться к учетной записи Google Play) и что все изменения приложения придут от оригинального автора, который это приложение разработал. Ключ, используемый для создания сертификата называется ключом подписи приложения.

Хранилище ключей или так называемый keystore — это бинарный файл. который содержит один или нескольких приватных ключей.

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

 

Подписка отладочной сборки APK (debug build APK)

Когда проект запускается в режиме отладки, то среда Android Studio или Cordova автоматически подписывает наш файл APK с debug — сертификатом, который генерируется инструментами Android SDK. В первый раз, когда запускается проектируемое приложение в режиме debug в Android Studio или через консоль Cordova, то Android SDK автоматически создает хранилище debug — ключей и в него сертификаты ключей, задав им свои пароли. Данное хранилище расположено по пути $HOME/.android/debug.keystore.

Из-за того, что debug — сертификаты созданы инструментами построения и они небезопасны для проектирования полноценного приложения, то большинство магазинов приложений, включая и Google Play не принимают APK — файлы, подписанные с debug — сертификатом для публикации.

Android Studio и Cordova автоматически сохраняет вашу информацию debug — подписки в конфигурации подписки приложения, поэтому вам не нужно вводить его каждый раз, когда вы отлаживаете приложение. Конфигурация подписки — это объект, содержащий всю необходимую информацию для подписания APK, включая путь к хранилищу ключей, пароль к хранилищу ключей, имя ключа и пароль к ключу. Вы не можете напрямую редактировать конфигурацию debug — подписки, но вы можете конфигурировать то, как вы смогли бы подписывать релиз(release) — построение.

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

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

Истечение срока действия отладочного сертификата

Ваш собственный сертификат используется для подписи вашего же APK и для него можно индивидуально установить время истечения срока жизненного цикла приложения, после чего приложения нельзя будет устанавливать на мобильные устройства, а вот что касается сертификата debug, то его дата истечения около 365 дней с даты его сборки. Когда дата данного сертификата истекает, то выбрасывается ошибка построения приложения.

Для того, чтобы решить проблему истечения времени debug — сертификата просто нужно удалить файл debug.keystore, который расположен по пути:

  • ~/.android/ на OS X и Linux
  • C:\Documents and Settings\<user>\.android\ на Windows XP
  • C:\Users\<user>\.android\ на Windows Vista и Windows 7, 8, и 10

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

Управление вашими ключами подписки

Поскольку ваш ключ подписи приложения используется для проверки вашей личности как разработчика и для обеспечения бесперебойных и безопасных обновлений для ваших пользователей, управление вашим ключом и обеспечение его безопасности очень важны как для вас, так и для ваших пользователей. Вы можете выбрать либо использовать приложение Google Play App Signing для безопасного управления и хранения ключа подписи приложения с помощью инфраструктуры Google, либо управлять и защищать собственное хранилище ключей и ключей подписи приложений.

Использование подписи Google Play App для добавления и обновления приложений APK

При использовании Google Play Signing вы будете иметь 2 ключа: ключ подписи приложения(app signing key) и ключ выгрузки(upload key). Google управляет и защищает ключи подписи приложения у себя на сервере и держит при себе ключ выгрузки и использует его для авторизации разработчика в сервисе Google Play Store для выгрузки приложения.

Когда вы выбираете подписку на Google Play, вы экспортируете и шифруете ключ подписи приложения, используя инструмент «Зашифровать секретный ключ», предоставляемый Google Play, а затем загружайте его в инфраструктуру Google. Затем вы создаете отдельный ключ для загрузки и регистрируете его в Google. Когда вы будете готовы к публикации, вы подписываете свое приложение с помощью загружаемого ключа и загружаете его в Google Play. Затем Google использует сертификат загрузки, чтобы подтвердить вашу личность, и повторно подписывает APK с вашим ключом подписи приложения для распространения, как показано ниже на рисунке . (Если у вас еще нет ключа подписи приложения, вы можете сгенерировать его во время процесса подписывания).

Подписание приложения с подпиской на Google Play
Подписание приложения с подпиской на Google Play

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

Дополнительные сведения о том, как выбрать приложение для входа в Google Play, см. В разделе Управление ключами подписи приложения.

Управление своим собственным хранилищем ключей

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

Если вы сами управляете собственными ключами подписки приложения и хранилищем ключей, когда вы подписываете ваш APK, то вы должны подписать его локально на вашем ПК, используя ваши ключи подписки приложений и загрузить подписанный APK прямо в Google Play Store для распространения сторонним пользователям, как показано на картинке

Подписание приложения при управлении собственным ключом подписи приложения
Подписание приложения при управлении собственным ключом подписи приложения

 

 

При составлении данной статьи использовался официальный ресурс Android Studio по ссылке.