Понимание хранилища ключей, сертификатов и псевдонимов - PullRequest
94 голосов
/ 20 апреля 2011

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

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

1 Ответ

126 голосов
/ 20 апреля 2011

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

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

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

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

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

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

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

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

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

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

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

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

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