Как использовать сертификат загрузки для выпуска обновления приложения? - PullRequest
0 голосов
/ 15 ноября 2018

На прошлой неделе я создал приложение и загрузил его первую версию в игровой магазин, создав хранилище ключей в Android Studio.Я хотел зарегистрироваться в App Signing, но Play Console сказала, что мне сначала нужно загрузить приложение, прежде чем я смогу в него войти, поэтому я загрузил комплект приложений (app.aab), а затем зарегистрировался в программе, теперь я вижу 2 сертификата - загрузитьсертификат и сертификат подписи приложения.Есть возможность скачать их в формате .der.

Что мне делать с этими файлами .der?Чтобы выпустить обновление, я снова пошел в Generate Signed Build, и он попросил у меня хранилище ключей, которое я выбрал и ввел пароль, и он генерировал обновленный подписанный пакет приложений.

В целом, я никогда не сталкивался свозможность использовать сертификат .der, если они не требуются, почему они отображаются в подписи приложений в разделе «Управление выпусками» в консоли Play.А поскольку Android Studio по-прежнему генерирует подписанные версии на основе хранилища ключей, доступного на моем жестком диске, какой смысл подписывать приложения, в которые я зарегистрировался?

Официальная документация по Подписание приложений и Управляющие ключи даже не упоминает об этих сертификатах загрузки.Все, что он упоминает, это то, что вы подписываете свое приложение, используя ключ загрузки, то есть ключ загрузки - Play Console об этом не упоминается, и Android Studio, Android Studio не требуется хранилище ключей для создания подписанных сборок в формате .jks

1 Ответ

0 голосов
/ 16 ноября 2018

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

tldr; Большинству разработчиков эти файлы .der не нужны, они предназначены для продвинутых сценариев использования.

Так много вопросов! ОК, пристегнись ...

Просто чтобы уточнить основы и убедиться, что мы используем один и тот же язык: когда вы создаете ключ в хранилище ключей , вы фактически создаете пару ключей ( закрытый ключ и открытый ключ ), а также сертификат . Сертификат содержит то, что мы называем отличительным именем (с вашим именем, названием компании и т. Д.) И открытым ключом. Таким образом, сертификат является общедоступной информацией и фактически добавляется в ваш APK, когда вы подписываете его, чтобы его могли видеть все. Закрытый ключ остается в вашем хранилище ключей и является секретом, который делает невозможным для кого-либо еще подписывать ваш APK таким способом, который может быть подтвержден вашим сертификатом. Поскольку существует так много терминов, и люди в целом не очень знакомы с основными понятиями криптографии, вы часто будете видеть, как люди просто используют термины «хранилище ключей», «ключ» и «сертификат» взаимозаменяемо.

Когда вы регистрируетесь в Подписание приложения , вы отправляете свой закрытый ключ в Google, чтобы Google мог подписать APK от вашего имени. Цель тройная:

  • Преимущество № 1 - Оптимизация приложений : Когда вы загрузите Пакет приложений Android , Google сможет подписывать APK, созданные им от вашего имени. Основным преимуществом является экономия размера для вашего приложения, но это выходит за рамки этого поста.
  • Преимущество № 2 - событие потери ключа : Независимо от того, загрузите ли вы APK или комплект приложений Android, если вы потеряете ключ, у Google все еще есть копия, поэтому вы все равно сможете обновить свой загружая APK-файлы, подписанные с помощью нового ключа (эта операция называется сброс ключа загрузки ), и Google по-прежнему сможет подписывать ваши APK-файлы с помощью исходного ключа подписи приложения. Без этого, если вы потеряете свой ключ, вы не сможете больше обновлять свое приложение.
  • Преимущество № 3 - Событие скомпрометированного ключа : Если вы подпишете APK-файлы, которые вы загружаете на Play Play, с помощью другого ключа (т. Е. Ключа загрузки), отличного от ключа подписи приложения, то вы подвергаетесь меньшему риску скомпрометировать ключ подписи вашего приложения (вы можете просто поместить его на диск с ограниченными ACL, поскольку вы больше не будете его использовать, вместо того, чтобы делиться им со многими разработчиками вашей компании). Если ваш ключ загрузки скомпрометирован, Google может просто изменить его. Если ваш ключ подписи приложения был скомпрометирован (например, утечка), то вы или Google ничего не могли бы сделать, и кто-то другой мог бы подписать APK, выдавая себя за ваше приложение, и распространять их в некоторых магазинах приложений или на веб-сайтах.

Вы видите, что теперь есть два вида ключей (и связанных сертификатов):

  • Ключ подписи приложения : Это ключ, который используется для подписи APK, доставляемых вашим пользователям.
  • Кнопка загрузки : это ключ, который Google Play использует для определения происхождения и целостности APK, которые вы загружаете в Play Play Console.

О, да, я должен также упомянуть: есть два способа зарегистрироваться в App Signing.

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

Для существующих приложений создание ключа для загрузки необязательно при регистрации в App Signing.Это для людей, которые заинтересованы только в использовании Benefit # 1 .Google настоятельно рекомендует создать ключ загрузки и начать загрузку APK / пакетов, подписанных с ним, чтобы избежать катастрофических сценариев, описанных в Преимущество № 2 и # 3 (ключ потерян / скомпрометирован).

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

Обратите внимание, что , поскольку вы можете по-прежнему загружать APK-файлы с подписью.с ключом подписи приложения не означает, что вы должны .Если вы хотите воспользоваться преимуществом Benefit # 3 , вам необходимо начать загрузку APK, подписанных с помощью ключа загрузки.

-

Теперь вернемся к ним.der files ... ну, скоро!

Когда ваше приложение Android связывается со сторонними API (например, API Google, Facebook API и т. д.), вам обычно приходится регистрировать свое приложение.Эта регистрация обычно требует двух частей информации: имя пакета и отпечаток сертификата (например, SHA1).Эта регистрация гарантирует, что только приложение с именем пакета и , подписанным с помощью ключа подписи приложения, сможет использовать вашу квоту этого API.

Все разработчики знают свое имя пакета, но частоспросите как получить отпечаток сертификата .Stackoverflow - это отличное место для поиска правильных команд для извлечения его из хранилища ключей, но Play Console также отображает его для удобства (и это также важно для разработчиков, которые просят Google сгенерировать ключ подписи приложения)для них, так как у них нет хранилища ключей с ключом подписи приложения).Вот почему вы видите MD5, SHA1 и SHA256 сертификата подписи вашего приложения.

Я вижу, что вы сейчас спрашиваете: «Хорошо, имеет смысл показать отпечатки пальцев сертификата подписи приложения, но зачем показывать отпечатки пальцевсертификата загрузки? "и это отличный вопрос, спасибо за вопрос.Если вы подпишете свои APK с помощью ключа загрузки перед их загрузкой в ​​Play Console, возможно, вы захотите протестировать эти артефакты раньше, и, таким образом, если у вас есть какая-либо интеграция с любым сторонним API, вам также потребуется зарегистрировать этот сертификат.!

Хорошо, теперь мы наконец-то добрались до файлов .der.

Файлы .der являются сертификатами. Play Console позволяет не только видетьотпечатки пальцев сертификатов, но также позволяет загрузить их в полном объеме.Единственная причина, по которой разработчик может нуждаться в них, - это когда сторонний API требует регистрации вашего приложения с другим типом отпечатка пальца.Например, API Facebook требует регистрации в Base64 двоичного представления SHA1 сертификата.Вы не можете вычислить это по отпечаткам пальцев, которые отображает консоль Play, поэтому вам нужно вручную запустить несколько команд для исходного сертификата.

[Источник: я работаю в Google и реализовал большую часть его]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...