Что такое файл хранилища ключей Android и для чего он используется?

128

Это общий вопрос, но особенно меня интересует его использование для Android. Что такое файл хранилища ключей и для чего он используется?

Могут ли несколько приложений Android использовать одно и то же хранилище ключей для подписи своего приложения (что именно означает «подписать» .apk?), И каковы последствия (если таковые имеются) из этого?

Кристофер Перри
источник
1
Вы, кажется, смешиваете две темы. Во-первых, это хранилище ключей, а во-вторых, это подпись APK. Также см. Книгу Николая Еленкова « Внутренние компоненты безопасности Android: подробное руководство по архитектуре безопасности Android» .
jww 04

Ответы:

130

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

Что касается того, что вы делаете с ним для Android, и, вероятно, то, что вы ищете, поскольку вы упоминаете о подписании apk, это ваш сертификат. Вы маркируете свое приложение своими учетными данными. Вы можете маркировать несколько приложений одним и тем же ключом. Фактически, рекомендуется использовать один сертификат для маркирования нескольких приложений, которые вы пишете. Легче отслеживать, какие приложения принадлежат вам.

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

Но помимо подписания apks для выпуска в мир, вы можете использовать его для аутентификации вашего устройства на сервере через SSL, если хотите, (также связанного с Android) среди других функций.

Otra
источник
2
Очень хороший ответ. Также следует отметить, что вам понадобится файл хранилища ключей, если вы собираетесь использовать «push-данные» в своем приложении!
KapteinMarshall
Зависит ли машина Keystore? Или мы можем использовать его на любом компьютере для обновления нашего приложения?
Yawar
8
Хорошее объяснение. Не могли бы вы также объяснить, почему нам требуется KeyStorePassword, Key alias, KeyPassword. Иметь три ключа кажется лишним.
ARK
18

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

Из Руководства по подписанию приложений на сайте разработчика Android:

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

Использование одного и того же ключа имеет несколько преимуществ: во-первых, проще обмениваться данными между приложениями, подписанными одним и тем же ключом. Во-вторых, это позволяет нескольким приложениям, подписанным одним и тем же ключом, работать в одном процессе, поэтому разработчик может создавать больше «модульных» приложений.

Александр Лукас
источник
10

Дополнительную информацию о процессе подписания можно найти в официальной документации Android здесь: http://developer.android.com/guide/publishing/app-signing.html.

Да, вы можете подписать несколько приложений одним и тем же хранилищем ключей. Но вы должны помнить одну важную вещь: если вы публикуете приложение в Play Store, вы должны подписать его не отладочным сертификатом. И если однажды вы захотите опубликовать обновление для этого приложения, хранилище ключей, используемое для подписи apk, должно быть таким же. В противном случае вы не сможете опубликовать свое обновление.

Рафаэль Титоль
источник
Нет, это неправильно. Хранилище ключей, которое вы используете для подписи apk, может быть другим, но ключ, который вы используете для подписи apk, должен быть таким же. Файл хранилища ключей - это просто файл, который используется для хранения информации о ключах и сертификатах. В одном файле хранилища ключей может быть несколько ключевых объектов.
zeleven
0

Вся идея keytool состоит в том, чтобы подписать ваш apk уникальным идентификатором, указывающим на источник этого apk. Файл хранилища ключей (насколько я понимаю) используется для отладки, поэтому ваш apk имеет функциональность keytool без подписи вашего apk для производства. Итак, да, для целей отладки вы должны иметь возможность подписывать несколько apk с помощью одного хранилища ключей. Но поймите, что при запуске в производство вам понадобятся уникальные инструменты для ключей в качестве идентификаторов для каждого создаваемого apk.

Адам Сторм
источник
Вам не нужно подписывать приложение для его отладки ни в эмуляторе, ни на реальном устройстве.
Маркус
Я не имел в виду, что вы ДОЛЖНЫ подписывать его для отладки ... но вы можете использовать хранилище ключей в качестве тестовой реализации вашего инструментария.
Adam Storm
Я не думаю keytool, что вы имеете в виду. keytool - это программа на Java, используемая для создания хранилищ ключей.
Otra
да, вы правы, я не имею в виду keytool. Я думаю, что «ключ» - вот что я имею в виду. Я просто пытался объяснить спрашивающему, что у вас может быть общий ключ apk для отладки, но после публикации каждый apk должен будет иметь уникальный ключ для редактирования и обновления.
Adam Storm
Им не нужны уникальные ключи ... вы можете подписать несколько apk одним закрытым ключом, на самом деле это предпочтительно. Можете ли вы представить себе отслеживание 10 разных сертификатов / ключей для 10 приложений?
Otra