Сертификати за Android APK - какви полета са задължителни и какво ще стане, ако тази информация се промени?

Това изглежда доста елементарно, но никъде не мога да намеря информацията, която търся, особено по отношение на приложенията за Android.

Създавам своя ключ за освобождаване (самоподписан) и от мен се иска много информация:

  • Име и фамилия: (ОК; няма вероятност да се промени)
  • Организационна единица: (това "име на фирмата" ли е?)
  • Организация: (По какво се различава това от „Единица“ по-горе?)
  • Град или населено място: (Това може да се промени...)
  • Щат или провинция: (Също така може да се промени...)
  • Код на държавата (XX): (ОК; няма вероятност да се промени)

Имайки това предвид, имам два основни въпроса относно самоподписаните сертификати, използвани за разпространение на приложения за Android:

  1. Мога ли при създаване да оставя някое от тези полета ПРАЗНИ, особено тези, които има вероятност да се променят? Или това е забранено? (Големият въпрос.)
  2. Ами ако искам да променя дадено поле по-късно? Това означава ли създаване на нов ключ и всеки да преинсталира приложението, за да надстрои отново, дори ако имам оригиналния ключ? (Изглежда, че е така, съдейки по малкото, което имам намерен.)

Благодаря предварително!


Редактиране: Повече информация за #1 по-горе: ако това е нещо като SSL сертификати, тогава името, организацията и държавата трябва да са достатъчни. Но така ли е? Плюсове и минуси на оставянето на някое/всички други полета празни? Не мога да бъда единственият, който се чуди за това по отношение на приложенията... и документите за Android, които прочетох досега, не помагат да се изясни това.

За #2 изглежда, че промяната на сертификата означава повторното му генериране и подписването с този нов сертификат не избягва проблема с пазара (това е като изцяло ново приложение, дори ако подписвате както с новите, така и със старите сертификати). Така че е още по-важно да го направите правилно (все пак достатъчно общо, в случай че се преместите) първия път, когато подписвате приложението.


person MartyMacGyver    schedule 07.10.2011    source източник
comment
трябва да проверите това. developer.android.com/guide/publishing/app-signing.html   -  person Uttam    schedule 07.10.2011
comment
Многократно го правех, преди да задам този въпрос. Виждате ли нещо, което пропуснах, което отговаря на някой от тези въпроси?   -  person MartyMacGyver    schedule 07.10.2011


Отговори (2)


Съдържанието на тези полета всъщност е доста неуместно и обикновено не се вижда от никой друг освен вас. Можете да оставите празни полета навсякъде, където keytool позволи без последствия по-късно.

След като подпишете apk с хранилище за ключове и го качите в Android Market, не можете да подпишете същия пакет с друго хранилище за ключове. Това очевидно се прави, за да се попречи на някой друг да замени вашето приложение с друго.

За моето хранилище за ключове поставям личната си информация в него, задавам дата на изтичане за 999 години в бъдещето и го пазя безопасно и архивирано.

person Michael Pardo    schedule 07.10.2011
comment
Мисля, че тогава това го покрива. Не бях сигурен дали има някакъв правен проблем с него... ако имаше, тогава щеше да е кошмар в настоящата схема, тъй като никога не можете да актуализирате сертификата, дори като го свържете (подписване със старо и ново за период от време до пълното преминаване към новия). Ако някой може да подпише със стария сертификат + нов сертификат, това доказва веригата на защита. Един крадец днес би трябвало само да продължи да използва стария сертификат). Това е опростено, но най-важното е, че актуализациите на сертификати трябва да са възможни (и наистина трябва да са в света на SSL), но това не е внедрено в Market. - person MartyMacGyver; 08.10.2011
comment
Девет години по-късно все още е много трудно да се намери подходяща информация - много се радвам, че намерих този въпрос и този отговор! @Michael или някой друг, знаете ли за някаква официална документация, в която се посочва дали (или че) полетата са незадължителни и дали (или че) е приемливо да се пишат стари стойности в тях? - person Tom; 12.11.2020

За да отговорим точно на въпроса кои полета са незадължителни: всъщност всички полета са незадължителни. Единственото изискване е да предоставите поне един (дори ако това е само кодът на държавата).

Ето обяснението на Android Studio: Android Studio показва съобщение за грешка

Той гласи:

Изисква се поне едно поле за издател на сертификат да не е празно

Разбира се, с известно тестване потвърдих, че се изисква само едно поле.

Както отговори Майкъл, след като приложението ви бъде публикувано, вие никога не можете да го промените.

person Paul Lammertsma    schedule 15.01.2016
comment
и дори това не се изисква поне когато бях насочен да използвам инструмента за ключове на Java директно от react-native - person 1mike12; 23.10.2017
comment
@1mike12 Можете ли да дадете насока как да използвате keytool за извършване на тази работа? Част от усложнението за мен е да знам какво всъщност прави този съветник -- създава хранилище за ключове, създава ключ, който да влезе в него, създава сертификат, подписва ключа със сертификата? Нещо друго? - person LarsH; 17.12.2018
comment
Документацията включва много повече подробности от това, което бих могъл да предложа тук: developer.android.com/training /articles/keystore. Самият keytool е документиран тук: docs.oracle.com /javase/8/docs/technotes/tools/unix/keytool.html - person Paul Lammertsma; 17.12.2018