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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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

Дополнительная информация:

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

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