2011-04-20 6 views
91

Czy magazyn kluczy jest faktycznym certyfikatem, czy też jest aliasem certyfikatu?Opis magazynów kluczy, certyfikatów i aliasów

Jeśli użyję innego aliasu do podpisania mojej aplikacji, czy to zepsuje aktualizacje na rynku? A może powinienem podpisać moją aplikację innym plikiem kluczy, żeby wszystko zepsuć? Gdzie znajdują się informacje pod aliasami, z których można wyświetlać?

Odpowiedz

120

Plik kluczy wygenerowany przez Keytool przechowuje pary kluczy prywatnych i publicznych. Każda para lub wpis zapisany w magazynie kluczy odwołuje się do unikalnego aliasu. W skrócie:

wpisu magazynu kluczy = prywatny + publiczny klucz para = identyfikowany przez alias

Magazyn kluczy chroni każdy klucz prywatny z jego indywidualnym hasłem, a także chroni integralność całego kluczy z (prawdopodobnie inne) hasło.

Na przykład po podpisaniu aplikacji dla systemu Android przy użyciu opcji Wyeksportuj podpisane pakiety aplikacji narzędzia Eclipse dla systemu Android użytkownik zostanie poproszony o wybranie magazynu kluczy, a następnie o wybranie jednego aliasu/wpisu/pary z tego magazynu kluczy . Po podaniu haseł do magazynu kluczy i wybranego aliasu aplikacja zostanie podpisana, a klucz publiczny (certyfikat) tego aliasu zostanie osadzony w pakiecie APK.

Teraz, aby odpowiedzieć na twoje pytanie, możesz zwolnić aktualizację tylko do aplikacji, która została podpisana przy użyciu aliasu "foo", ponownie podpisując aktualizację z 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, aby podpisać aplikację z nowym pseudonimem, ale polega klonowanie istniejącego aliasu w magazynie kluczy korzystając keytool -keyclone:

tworzy nowy wpis kluczy, które ma taką samą klucz prywatny i łańcuch certyfikatów jako oryginalny wpis .

Pierwotny wpis jest identyfikowany przez alias (domyślnie "mykey", jeśli nie podano ). Nowy wpis (docelowy) jest identyfikowany przez dest_alias. Jeśli alias docelowy nie zostanie podany w wierszu polecenia , użytkownik zostanie poproszony o jego podanie: .

Jeśli hasło klucza prywatnego jest różni się od hasła magazynu kluczy, wówczas wpis zostanie sklonowany tylko jeśli ważny KeyPass jest dostarczany. To jest hasło używane do ochrony klucza prywatnego związanego z aliasem. Jeśli nie zostanie podane żadne hasło klucza w wierszu komend , a hasło prywatne jest inne niż hasło magazynu kluczy , użytkownik zostanie poproszony o podanie hasła . Klucz prywatny w sklonowanej pozycji może być chroniony przy pomocy innym hasłem, jeśli trzeba. Jeśli nie zostanie dostarczona żadna nowa opcja w wierszu polecenia , użytkownik zostanie poproszony o podanie hasła nowego wpisu (i może zdecydować, aby było to 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

+3

Witryna dev sugeruje, przy użyciu tego samego certyfikatu dla wszystkich aplikacji. Czy to oznacza, że ​​tak długo, jak korzystam z tego samego magazynu kluczy, mogę używać dowolnego aliasu z dowolnym hasłem i nie zepsuje aktualizacji, ponieważ jest to tylko referencja? 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 swojej aplikacji. –

+2

@Julio Czy więc najlepszą praktyką byłoby używanie tego samego aliasu dla wszystkich różnych aplikacji, które chcesz opublikować, co sugeruje witryna dla programistów? Nie widzę powodu, aby utworzyć osobny alias dla wszystkich swoich aplikacji. –