Подпись приложений: сертификаты iOS, профили и ключи Android
Основы4 минРедакция Innovialabs
Коротко
Подпись доказывает, что обновление выпустил тот же владелец; в iOS ей управляет Apple через сертификаты и профили, в Android главное — не потерять upload key и хранить все ключи на аккаунтах компании, а не подрядчика.
Зачем приложение подписывают
Подпись — это криптографическое доказательство того, кто собрал приложение и что его не изменили после сборки. Магазин и операционная система проверяют её при каждой загрузке и установке.
На практике это значит три вещи:
- обновление примут, только если оно подписано тем же владельцем, что и предыдущая версия;
- никто посторонний не сможет выпустить «обновление» вашего приложения;
- доступ к сервисам (push-уведомления, вход через Google, карты) часто привязан к конкретной подписи.
Поэтому ключи подписи — такой же актив бизнеса, как домен или аккаунт в банке.
Как это устроено в iOS
В экосистеме Apple подпись состоит из нескольких частей, которые выдаются через Apple Developer Program:
| Элемент | Что это | Зачем нужен |
|---|---|---|
| Сертификат | Пара «приватный ключ + сертификат от Apple» | Подтверждает, что сборку подписал участник вашей команды |
| App ID / Bundle ID | Уникальный идентификатор приложения | Связывает подпись, push и другие возможности с конкретным приложением |
| Provisioning profile | Файл, который связывает сертификат, App ID и (для тестов) список устройств | Разрешает установку сборки в нужном режиме |
Профили бывают разных типов: для разработки, для установки на ограниченный список устройств (ad hoc), для App Store и TestFlight. У сертификатов и профилей есть срок действия — его нужно продлевать.
Важная деталь: приложения в App Store дополнительно переподписывает сама Apple. Поэтому если сертификат дистрибуции истёк или был отозван, опубликованное приложение у пользователей продолжит работать — вы просто создадите новый сертификат для следующих сборок. Хуже с корпоративными и ad hoc-сборками: там истечение профиля может остановить запуск у сотрудников.
Отдельно стоит беречь ключ для push-уведомлений (APNs, файл .p8): Apple даёт скачать его только один раз.
Как это устроено в Android
В Google Play сегодня используется схема Play App Signing с двумя ключами:
- App signing key — главный ключ, которым подписывается то, что получают пользователи. Его хранит Google.
- Upload key — ключ, которым команда подписывает сборку (AAB) перед загрузкой в Play Console. Он у вас.
Создать upload key можно стандартной утилитой keytool из JDK:
keytool -genkeypair -v -keystore upload-keystore.jks -keyalg RSA -keysize 2048 -validity 10000 -alias upload
Файл keystore, его пароль, alias и пароль ключа — это четыре вещи, которые нужно сохранить вместе.
Что будет, если потерять ключ
| Ситуация | Последствия |
|---|---|
| Потерян iOS-сертификат | Отзываете старый, выпускаете новый. Пользователи ничего не заметят |
| Потерян upload key Android при Play App Signing | Владелец аккаунта запрашивает сброс upload key в Play Console. Неприятно, но решаемо |
| Потерян ключ Android без Play App Signing (старые приложения) | Обновить приложение нельзя. Придётся выпускать новое под другим package name и заново собирать аудиторию |
| Потерян доступ к аккаунту разработчика | Самый тяжёлый случай: без аккаунта не помогут никакие ключи |
Кто должен держать ключи
Правило простое: всё принадлежит компании-владельцу приложения, а подрядчик получает доступ.
- Аккаунты Apple Developer и Google Play Console регистрируются на компанию, подрядчик добавляется как участник команды с нужной ролью.
- Keystore и пароли лежат в корпоративном менеджере паролей или хранилище секретов, плюс резервная копия в отдельном месте.
- В CI/CD ключи передаются через защищённые секреты, а не хранятся в репозитории.
- При смене подрядчика роли отзываются, ключи остаются у вас.
Частые ошибки
- Keystore коммитят в Git вместе с паролями в открытом виде.
- Ключи есть только на ноутбуке одного разработчика.
- Аккаунт в магазине зарегистрирован на личную почту фрилансера.
- В Firebase, Google Maps или Google Sign-In прописывают отпечаток upload key вместо app signing key — и в релизе вход или карты перестают работать. Отпечаток app signing key есть в Play Console.