Понимание хранилища ключей, сертификатов и псевдонимов

95

Является ли хранилище ключей фактическим сертификатом или сертификатом является псевдоним?

Если я использую другой псевдоним для подписи своего приложения, это испортит обновления на рынке? Или мне нужно будет подписать свое приложение с другим хранилищем ключей, чтобы что-то испортить? А где можно просмотреть информацию под псевдонимом?

Роджер
источник

Ответы:

127

Файл хранилища ключей, созданный Keytool, хранит пары закрытых и открытых ключей. Каждая пара или запись, хранящаяся в хранилище ключей, имеет уникальный псевдоним. Вкратце:

Запись в хранилище ключей = пара закрытых + открытых ключей = идентифицируется псевдонимом

Хранилище ключей защищает каждый закрытый ключ своим индивидуальным паролем, а также защищает целостность всего хранилища ключей (возможно, другим) паролем.

Например, когда вы подписываете приложение Android с помощью параметра «Экспорт подписанного пакета приложения» инструмента Eclipse Android, вам сначала предлагается выбрать хранилище ключей, а затем предлагается выбрать один псевдоним / запись / пару из этого хранилища ключей. После предоставления паролей как для хранилища ключей, так и для выбранного псевдонима приложение подписывается, и открытый ключ (сертификат) для этого псевдонима внедряется в APK.

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

Однако есть способ подписать приложение новым псевдонимом, но он включает в себя клонирование существующего псевдонима в хранилище ключей с помощью keytool -keyclone :

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

Исходная запись идентифицируется псевдонимом (по умолчанию используется mykey, если он не указан). Новая (конечная) запись идентифицируется dest_alias. Если в командной строке не указан псевдоним назначения, пользователю предлагается его ввести.

Если пароль закрытого ключа отличается от пароля хранилища ключей, то запись будет клонирована только в том случае, если предоставлен действительный пароль. Это пароль, используемый для защиты закрытого ключа, связанного с псевдонимом. Если ключевой пароль не указан в командной строке, а пароль закрытого ключа отличается от пароля хранилища ключей, пользователю предлагается ввести его. При желании закрытый ключ в клонированной записи может быть защищен другим паролем. Если в командной строке не задана опция -new, пользователю предлагается ввести пароль новой записи (и он может выбрать такой же пароль, как и для закрытого ключа клонированной записи).

Больше информации:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.android.com/guide/publishing/app-signing.html

Хулио Горге
источник
3
Сайт разработчиков предлагает использовать один и тот же сертификат для всех ваших приложений. Значит ли это, что пока я использую одно и то же хранилище ключей, я могу использовать любой псевдоним с любым паролем, и это не испортит обновления, поскольку это просто ссылка? Фактическое хранилище ключей - важная часть?
Роджер
1
Я переписал свой ответ, чтобы точнее. Короче говоря, вы действительно должны использовать один и тот же псевдоним для подписи всех обновлений вашего приложения.
Хулио Горге
2
@Julio Так что лучше всего использовать один и тот же псевдоним для всех разных приложений, которые вы хотите опубликовать, как предлагает сайт разработчиков? Не вижу смысла создавать отдельные псевдонимы для всех ваших приложений.
Тони Чан
@ JulioGorgé-Эй, я просто хотел знать, что псевдоним R чувствителен к регистру .. ??
Имя Нилай
@ JulioGorgé, вы имеете в виду тот же псевдоним или тот же ключ. Псевдоним - это просто имя, я могу переименовать псевдоним. Вы можете выпускать обновление до тех пор, пока ключи (а точнее, открытые ключи) в приложении совпадают.
Дирадж Бхаскар