Co to jest plik kluczy systemu Android i do czego służy?

128

To jest ogólne pytanie, ale szczególnie interesuje mnie jego wykorzystanie na Androida. Co to jest plik kluczy i do czego służy?

Czy wiele aplikacji na Androida może używać tego samego magazynu kluczy do podpisywania aplikacji (co dokładnie oznacza „podpisywanie” aplikacji .apk?) I jakie są tego konsekwencje (jeśli w ogóle)?

Christopher Perry
źródło
1
Wydaje się, że łączysz dwa tematy. Pierwszy to magazyn kluczy, a drugi to podpisywanie APK. Zobacz także Nikolay Elenkov's Android Security Internals: An-Depth Guide to Android's Security Architecture .
jww

Odpowiedzi:

130

Odpowiedziałbym, że plik kluczy służy do uwierzytelnienia się każdemu, kto o to pyta. Nie ogranicza się tylko do podpisywania plików .apk, możesz go używać do przechowywania osobistych certyfikatów, podpisywania danych do przesłania i całej różnorodności uwierzytelniania.

Jeśli chodzi o to, co robisz z nim na Androida i prawdopodobnie to, czego szukasz, skoro wspominasz o podpisywaniu apk, jest to Twój certyfikat. Znakujesz swoją aplikację swoimi poświadczeniami. Możesz oznaczyć wiele aplikacji tym samym kluczem. W rzeczywistości zaleca się używanie jednego certyfikatu do oznaczania marki wielu pisanych aplikacji. Łatwiej jest śledzić, które aplikacje należą do Ciebie.

Nie jestem pewien, co masz na myśli mówiąc implikacje. Przypuszczam, że oznacza to, że nikt oprócz posiadacza twojego certyfikatu nie może zaktualizować twojej aplikacji. Oznacza to, że jeśli wypuścisz go na wolność, utracisz certyfikat użyty do podpisania aplikacji, nie możesz wydawać aktualizacji, więc zachowaj ten certyfikat w bezpiecznym miejscu i zarchiwizuj go w razie potrzeby.

Ale oprócz podpisywania apek w celu wypuszczenia na wolność, możesz użyć go do uwierzytelnienia swojego urządzenia na serwerze przez SSL, jeśli chcesz, (także w odniesieniu do Androida).

Otra
źródło
2
Bardzo dobra odpowiedź. Należy również pamiętać, że jeśli zamierzasz używać funkcji „push data” w swojej aplikacji, potrzebujesz pliku kluczy!
KapteinMarshall
Czy maszyna Keystore jest specyficzna? Lub możemy go użyć na dowolnym komputerze, aby zaktualizować naszą aplikację?
Yawar
7
Dobre wytłumaczenie. Czy możesz również wyjaśnić, dlaczego wymagamy KeyStorePassword, Key alias, KeyPassword. Posiadanie trzech kluczy wydaje się zbędne.
ARK,
18

Android Market wymaga podpisywania wszystkich publikowanych aplikacji certyfikatem przy użyciu mechanizmu klucza publicznego / prywatnego (certyfikat jest podpisany Twoim kluczem prywatnym). Zapewnia to warstwę zabezpieczeń, która zapobiega, między innymi, zdalnym atakującym wysyłaniu na rynek złośliwych aktualizacji aplikacji (wszystkie aktualizacje muszą być podpisane tym samym kluczem).

Z Przewodnika podpisywania aplikacji w witrynie programisty aplikacji na Androida:

Ogólnie zalecaną strategią dla wszystkich programistów jest podpisywanie wszystkich aplikacji tym samym certyfikatem przez cały oczekiwany okres ich użytkowania. Jest kilka powodów, dla których warto to zrobić ...

Używanie tego samego klucza ma kilka zalet - jedną z nich jest to, że łatwiej jest udostępniać dane między aplikacjami podpisanymi tym samym kluczem. Innym jest to, że umożliwia uruchamianie wielu aplikacji podpisanych tym samym kluczem w tym samym procesie, dzięki czemu programista może tworzyć bardziej „modułowe” aplikacje.

Alexander Lucas
źródło
10

Więcej informacji na temat procesu podpisywania można znaleźć w oficjalnej dokumentacji Androida tutaj: http://developer.android.com/guide/publishing/app-signing.html

Tak, możesz podpisać kilka aplikacji tym samym magazynem kluczy. Ale musisz pamiętać o jednej ważnej rzeczy: jeśli publikujesz aplikację w Sklepie Play, musisz podpisać ją certyfikatem innym niż debug. A jeśli pewnego dnia zechcesz opublikować aktualizację tej aplikacji, magazyn kluczy użyty do podpisania apk musi być taki sam. W przeciwnym razie nie będziesz mógł opublikować swojej aktualizacji.

Raphaël Titol
źródło
Nie, to jest złe. Magazyn kluczy, którego używasz do podpisywania apk, może być inny, ale klucz używany do podpisywania apk musi być taki sam. Plik kluczy to tylko plik, który służył do przechowywania informacji o kluczu i certyfikacie, możesz mieć wiele jednostek kluczy w tym samym pliku kluczy.
zeleven
0

Cała idea narzędzia keytool polega na podpisaniu apk unikalnym identyfikatorem wskazującym źródło tego apk. Plik kluczy (z tego, co rozumiem) jest używany do debugowania, więc Twój apk ma funkcjonalność narzędzia kluczy bez podpisywania apk do produkcji. Więc tak, do celów debugowania powinieneś być w stanie podpisać wiele aplikacji za pomocą jednego magazynu kluczy. Ale zrozum, że po przejściu do produkcji będziesz potrzebować unikalnych narzędzi jako identyfikatorów dla każdego utworzonego pliku APK.

Adam Storm
źródło
Nie musisz podpisywać aplikacji, aby ją debugować, ani w emulatorze, ani na rzeczywistym urządzeniu.
Marcus,
Nie miałem na myśli, że MUSISZ go podpisać, aby go debugować ... ale możesz użyć magazynu kluczy jako testowej implementacji swojego narzędzia.
Adam Storm,
Nie wydaje mi się, keytoolco masz na myśli. keytool to program Java służący do generowania magazynów kluczy.
Otra
tak, masz rację, keytool nie jest tym, co mam na myśli. Myślę, że mam na myśli „klucz”. Próbowałem tylko wyjaśnić pytającemu, że możesz mieć wspólny klucz apk do debugowania, ale po opublikowaniu każdy apk będzie musiał mieć unikalny klucz do edycji i aktualizacji.
Adam Storm,
Nie potrzebują jednak unikalnych kluczy ... możesz podpisać wiele plików APK jednym kluczem prywatnym, w rzeczywistości jest to preferowane, abyś to zrobił. Czy możesz sobie wyobrazić śledzenie 10 różnych certyfikatów / kluczy dla 10 aplikacji?
Otra