Zrozumienie magazynu kluczy, certyfikatów i aliasów

95

Czy magazyn kluczy jest rzeczywistym certyfikatem, czy alias jest certyfikatem?

Jeśli użyję innego aliasu do podpisania mojej aplikacji, czy zepsuje to aktualizacje na rynku? A może musiałbym podpisać moją aplikację przy użyciu innego magazynu kluczy, aby coś zepsuć? A skąd można wyświetlić informacje pod aliasem?

zrozumiałem
źródło

Odpowiedzi:

127

Plik kluczy wygenerowany przez Keytool przechowuje pary kluczy prywatnych i publicznych. Każda para lub pozycja przechowywana w magazynie kluczy ma przypisany unikalny alias. W skrócie:

Wpis w magazynie kluczy = para kluczy prywatny + publiczny = identyfikowany przez alias

Magazyn kluczy chroni każdy klucz prywatny za pomocą jego indywidualnego hasła, a także chroni integralność całego magazynu kluczy za pomocą (prawdopodobnie innego) hasła.

Na przykład, gdy podpisujesz aplikację na Androida za pomocą opcji Eksportuj podpisany pakiet aplikacji narzędzia Eclipse Android, zostaniesz poproszony o wybranie magazynu kluczy, a następnie o wybranie pojedynczego aliasu / wpisu / pary z tego magazynu kluczy. Po podaniu haseł do magazynu kluczy i wybranego aliasu aplikacja jest podpisywana, a klucz publiczny (certyfikat) dla tego aliasu jest osadzany w pliku APK.

Teraz, aby odpowiedzieć na Twoje pytanie, możesz zwolnić aktualizację tylko do aplikacji, która została podpisana aliasem „foo”, podpisując ją ponownie tym samym aliasem. Utrata magazynu kluczy, w którym przechowywany jest Twój alias, uniemożliwiłaby wydanie zaktualizowanej wersji aplikacji.

Istnieje jednak sposób na podpisanie aplikacji nowym aliasem, ale wymaga to sklonowania istniejącego aliasu w magazynie kluczy za pomocą narzędzia keytool -keyclone :

Tworzy nowy wpis magazynu kluczy, który ma ten sam klucz prywatny i łańcuch certyfikatów, co oryginalny wpis.

Oryginalny wpis jest identyfikowany przez alias (domyślnie „mykey”, jeśli nie zostanie podany). Nowy (docelowy) wpis jest identyfikowany przez alias_doc. Jeśli w wierszu poleceń nie zostanie podany żaden alias docelowy, użytkownik zostanie o to poproszony.

Jeśli hasło klucza prywatnego różni się od hasła do magazynu kluczy, wpis zostanie sklonowany tylko wtedy, gdy zostanie podana poprawna hasło. To jest hasło używane do ochrony klucza prywatnego skojarzonego z aliasem. Jeśli hasło klucza nie jest podane w wierszu poleceń, a hasło klucza prywatnego różni się od hasła magazynu kluczy, użytkownik jest o to monitowany. W razie potrzeby klucz prywatny w sklonowanej pozycji może być chroniony innym hasłem. Jeśli w wierszu poleceń nie podano opcji -new, użytkownik jest proszony o podanie hasła nowego wpisu (i może wybrać, czy będzie ono takie samo, jak w przypadku klucza prywatnego sklonowanego wpisu).

Więcej informacji:

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

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

Julio Gorgé
źródło
3
Witryna deweloperów sugeruje używanie tego samego certyfikatu dla wszystkich aplikacji. Czy to oznacza, że ​​jeśli używam tego samego magazynu kluczy, mogę używać dowolnego aliasu z dowolnym hasłem i nie zepsuje aktualizacji, ponieważ jest to tylko odniesienie? Rzeczywisty magazyn kluczy jest ważną częścią?
Roger
1
Przepisałem odpowiedź, aby była dokładniejsza. Krótko mówiąc, musisz rzeczywiście używać tego samego aliasu do podpisywania wszystkich aktualizacji aplikacji.
Julio Gorgé
2
@Julio Czy więc najlepszą praktyką byłoby użycie tego samego aliasu dla wszystkich różnych aplikacji, które chcesz opublikować, jak sugeruje witryna deweloperów? Nie widzę powodu, aby tworzyć osobny alias dla wszystkich Twoich aplikacji.
Tony Chan
@ JulioGorgé-Hej, chciałem tylko wiedzieć, że w aliasie R rozróżniana jest wielkość liter ... ??
Nazywam się Nilay,
@ JulioGorgé, masz na myśli ten sam alias czy ten sam klucz. Alias ​​to tylko nazwa, mogę zmienić nazwę aliasu. Możesz zwolnić aktualizację tak długo, jak długo klucze (konkretnie klucze publiczne) w aplikacji będą pasować.
Dheeraj Bhaskar