Как использовать функцию подписания приложений в Google Play

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

Важно! Если вы используете наборы Android App Bundle (рекомендуемый формат публикации приложений), то перед их загрузкой вам потребуется зарегистрироваться в сервисе подписания приложений в Google Play.

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

Как это работает

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

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

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

Описания ключей, объектов и инструментов
Термин Описание
Ключ подписи приложения

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

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

Ключ загрузки

Ключ, которым вы подписываете набор App Bundle или APK-файл перед загрузкой в Google Play. Никому не передавайте этот ключ, но при необходимости вы можете поделиться открытым сертификатом приложения. В целях безопасности для подписания и загрузки приложения рекомендуется использовать разные ключи.

Сгенерировать ключ загрузки можно двумя способами:

  • Используйте ключ подписи приложения. Если при регистрации в программе вы разрешили Google сгенерировать ключ подписи приложения, ключом загрузки станет ключ, использованный вами для подписи первого выпуска приложения.
  • Используйте отдельный ключ загрузки. Если при регистрации в программе вы передали собственный ключ подписи приложения, для безопасности вы можете сгенерировать новый ключ загрузки. Если вы не хотите этого делать, используйте ключ подписи приложения в качестве ключа загрузки для подписания новых выпусков.
Сертификат (DER или PEM)

Сертификат, который содержит открытый ключ и дополнительную информацию о его владельце. Сертификат открытого ключа позволяет кому угодно узнать, кто подписал набор App Bundle или APK-файл. Этим сертификатом можно делиться, так как он не включает закрытый ключ.

Чтобы зарегистрировать ключи у поставщиков API, вы можете скачать открытый сертификат для ключа подписи приложения на странице Подписание приложений в Play Console. Сертификатом открытого ключа можно делиться со всеми, так как он не включает закрытый ключ.

Цифровой отпечаток сертификата

Короткий и уникальный идентификатор сертификата. Отпечаток вместе с названием пакета часто запрашивают поставщики API для предоставления доступа к их услугам.

Цифровые отпечатки MD5, SHA-1 и SHA-256 сертификатов загрузки и подписи приложения можно найти на странице Подписание приложений в Play Console. Вы также можете получить цифровой отпечаток другого типа. Для этого скачайте оригинальный сертификат в формате DER на той же странице.

Хранилище ключей Java (JKS или KEYSTORE) Хранилище сертификатов безопасности и закрытых ключей.
Инструмент PEPK

Инструмент для экспорта закрытых ключей из хранилища Java и их шифрования для передачи в Google Play.

Когда вы предоставите Google ключ подписи приложения, выберите экспорт и загрузку собственного ключа (и при необходимости – его открытого сертификата), а затем, следуя инструкциям, скачайте инструмент и воспользуйтесь им. Вы также можете скачать, посмотреть и использовать открытый исходный код инструмента PEPK.

Процесс подписания приложений

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

Если вы переходите на наборы Android App Bundle, их можно проверить в версиях для тестирования, а в рабочих использовать существующие APK-файлы. Вот как это работает:

  1. Вы подписываете набор App Bundle или APK-файл и загружаете его в Play Console.
  2. Процесс подписания приложений зависит от того, что вы загружаете:
    • Набор App Bundle. Google оптимизирует APK-файлы из вашего набора, а затем подписывает их с помощью ключа подписи приложения.
    • APK-файл, подписанный ключом загрузки. Google проверяет вашу подпись, удаляет ее и повторно подписывает APK-файлы ключом подписи приложения.
    • APK-файл, подписанный ключом подписи приложения. Google проверяет подпись.
  3. Google доставляет подписанные APK-файлы пользователям.

Как зарегистрироваться в программе подписания приложений в Google Play

Новые приложения

Шаг 1. Создайте ключ загрузки

  1. Создайте ключ загрузки, следуя инструкциям.
  2. Подпишите новый APK-файл ключом загрузки.

Шаг 2. Подготовьте выпуск

  1. Подготовьте и внедрите выпуск приложения, следуя инструкциям.
  2. Выбрав тип версии, настройте параметры подписания приложений в разделе "Разрешите Google защищать ключ подписи приложения и управлять им".
  3. Нажмите Продолжить, и сгенерированный ключ станет ключом загрузки, который будет использоваться для подписания будущих выпусков. Вы также можете перейти в Параметры подписания приложений, которые включают в себя следующие возможности:
    • Использовать один ключ для разных приложений в аккаунте разработчика (вариант 2).
    • Экспортировать и загрузить существующий ключ из Java Keystore (вариант 3) или не использовать Java Keystore (вариант 4). Выберите подходящий вам способ экспорта и загрузки. Загрузив ключ подписи приложения и его открытый сертификат, вы можете создать ключ загрузки или использовать в качестве него ключ подписи приложения.
    • Выйти из сервиса подписания приложений в Google Play (вариант 4).
  4. Выберите Обновить.

Примечание. Чтобы продолжить, нужно принять Условия использования и зарегистрироваться в сервисе подписания приложений.

Шаг 3. Зарегистрируйте ключ подписи приложения у поставщиков API

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

  1. Откройте Play Console.
  2. В меню слева нажмите Версия > Настройка > Подписи приложений.
  3. Прокрутите страницу вниз до раздела "Сертификат для ключа подписи приложения" и скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
    • Если поставщик API требует другой тип цифрового отпечатка, вы можете скачать оригинальный сертификат в формате DER и преобразовать его с помощью соответствующих инструментов.
Опубликованные приложения

Шаг 1. Зарегистрируйтесь в сервисе подписания приложений Google Play

  1. Откройте Play Console.
  2. Выберите приложение.
  3. В меню слева нажмите Версия > Настройка > Подписи приложений.
  4. Если вы этого ещё не сделали, прочитайте Условия использования и нажмите Принять.

Шаг 2. Отправьте оригинальный ключ в Google и создайте ключ загрузки

  1. Найдите оригинальный ключ подписи приложения.
  2. Откройте Play Console.
  3. Выберите приложение.
  4. В меню слева нажмите Версия > Настройка > Подписи приложений.
  5. Выберите способ экспорта и загрузки, подходящий для вашего процесса выпуска, и загрузите существующий ключ.

Шаг 3. Создайте ключ загрузки (необязательно, но рекомендуется)

  1. Создайте ключ загрузки и загрузите сертификат в Google Play.
    • В качестве ключа загрузки можно также использовать ключ подписи приложения.
  2. Скопируйте цифровые отпечатки (MD5, SHA-1 и SHA-256) сертификата подписания приложений.
    • Для проведения тестирования вам может потребоваться зарегистрировать у поставщика API сертификат ключа загрузки с помощью цифрового отпечатка сертификата и ключа подписи приложения.

Шаг 4. Подпишите следующее обновление своего приложения ключом загрузки

Выпускаемые обновления приложения нужно подписывать ключом загрузки.

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

Как создать ключ загрузки и обновить хранилища ключей

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

Вы можете создать ключ загрузки при регистрации в программе подписания приложений в Google Play или сгенерировать его позже в разделе Управление релизом > Подписание приложений.

Чтобы создать ключ загрузки, выполните следующие действия:

  1. Следуйте инструкциям на сайте для разработчиков Android. Храните ключ в безопасном месте.
  2. Экспортируйте сертификат для ключа загрузки в формате PEM. В следующем примере команды вместо аргументов, выделенных подчеркиванием, укажите свои значения:
    • $ keytool -export -rfc -keystore upload-keystore.jks -alias upload -file upload_certificate.pem
  3. Когда в процессе выпуска появится запрос, загрузите сертификат, чтобы зарегистрировать его в Google.

Если вы используете ключ загрузки:

  • Ключ загрузки регистрируется в Google только для аутентификации личности создателя приложения.
  • Ваша подпись удаляется из всех загруженных APK-файлов, прежде чем они попадают к пользователям.
Ограничения
  • Ключ загрузки должен использовать шифрование RSA, его размер должен составлять не менее 2048 бит.
  • Не поддерживаются ключи DSA и EC, а также ключи RSA размером менее 2048 бит.
Обновление хранилищ ключей

Создав ключ загрузки, проверьте и при необходимости обновите следующие местоположения:

  • локальная система;
  • защищенный локальный сервер (с различными списками контроля доступа);
  • облачная система (с различными списками контроля доступа);
  • специальные сервисы по управлению ключами;
  • репозитории Git.

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

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

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

Запрашивать обновление ключа подписи приложения следует в таких случаях:

  • Вам нужен более криптостойкий ключ.
  • Ключ подписи приложения взломан.

Примечание. Запрос на обновление ключа подписи приложения в Play Console не связан с заменой ключей в схеме подписания APK-файлов версии 3 для Android P и более поздних версий. В настоящее время такая замена ключей не поддерживается Google Play.

Важные примечания, касающиеся обновления ключей

Прежде чем запрашивать обновление ключа, важно понять, какие изменения это повлечет.

  • Если вы используете один ключ подписи для нескольких приложений, чтобы применять в них один код или данные, обновите приложения. В таком случае они смогут распознавать сертификаты как нового, так и устаревшего ключа.
  • Если приложение использует API, перед публикацией его обновления обязательно зарегистрируйте сертификаты для нового и устаревшего ключей подписи приложения у провайдера API. Сертификаты доступны на странице Подписание приложений в Play Console.  
  • Если многие пользователи вашего приложения устанавливают обновления через файлообменные сети, они смогут устанавливать только обновления, подписанные тем же ключом, что и установленное на их устройствах приложение. Если приложения нельзя обновить, поскольку установленная версия подписана другим ключом, пользователи могут удалить и переустановить его, чтобы получать обновления.
Как запросить обновление ключа для новых установок
  1. Войдите в Play Console.
  2. Выберите приложение.
  3. В меню слева нажмите Версия > Настройка > Подписи приложений.
  4. На карточке "Обновите ключ подписи для новых установок приложения" выберите Запросить обновление ключа.
  5. Выберите один из вариантов.
    • В зависимости от выбранного варианта, возможно, придется обратиться в службу поддержки, чтобы завершить запрос.
  6. Разрешите Google создать новый ключ подписи приложения (рекомендуется) или загрузите его.
    • После обновления ключа подписи приложения, если он совпадал с ключом загрузки, вы можете продолжить использовать прежний ключ подписи приложения в качестве ключа загрузки или создать новый.

Рекомендации

  • Если вы также опубликовали приложение за пределами Google Play или собираетесь это сделать и при этом хотите использовать тот же ключ подписи, у вас есть два варианта: 
    • Рекомендовано: Google сгенерирует ключ, после чего вы сможете скачать из App Bundle Explorer подписанный универсальный APK-файл и использовать его за пределами Google Play. Также можно скачать подписанные APK-файлы из Google Play Developer API. 
    • Вы сами сгенерируете общий ключ подписи приложения и загрузите копию в Google при регистрации в сервисе подписания приложений в Google Play.
  • Чтобы защитить свой аккаунт, включите двухэтапную аутентификацию для всех аккаунтов, у которых есть доступ к Play Console.
  • После публикации набора App Bundle в тестовой или рабочей версии вы можете открыть App Bundle Explorer и скачать ZIP-архив, содержащий все APK-файлы для определенного устройства. Эти APK-файлы уже подписаны ключом подписи приложения. Вы можете установить их на устройство из ZIP-архива с помощью команды adb install-multiple *.apk.
  • Для большей безопасности сгенерируйте новый ключ загрузки, который отличается от ключа подписи приложения.
  • Если вы хотите протестировать APK-файл, подписанный ключом загрузки, зарегистрируйте ключ в службе или API, которые используют подпись приложения для аутентификации (например, Google Maps API или Facebook SDK).
  • Если вы используете API Google, можно зарегистрировать сертификат загрузки в Google Cloud Console.

Что делать, если ключ загрузки утерян или взломан

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

Когда команда службы поддержки зарегистрирует новый ключ загрузки, вы получите электронное письмо, а затем сможете обновить хранилища ключей и зарегистрировать ключ у поставщиков API.

Важно! Сброс ключа загрузки не затрагивает ключ подписи приложения, с помощью которого Google Play подписывает APK-файлы перед отправкой пользователям.

Эта информация оказалась полезной?
Как можно улучшить эту статью?

Требуется помощь?

Войдите в свой аккаунт, чтобы мы могли предоставить вам дополнительные варианты поддержки и быстрее решить вашу проблему.