A Keystore egy védett kriptográfiai tároló, amelyet Android-fejlesztésben használnak privát kulcsok és alkalmazás-aláírási tanúsítványok tárolására. A Android Developers Documentation, 2026 szerint minden APK-nak vagy App Bundle-nek a Google Play-ben való közzététel előtt digitális aláírással kell rendelkeznie a Keystore-ből. Tekintsük át a Keystore formátumokat, a létrehozást és a projektben való használatot.
Főbb pontok
Keystore (KeyStore) — a Java Cryptography Architecture (JCA) szabványos mechanizmusa kriptográfiai kulcsok, tanúsítványok és megbízható bejegyzések tárolására. Az Android-fejlesztésben a Keystore a privát kulcs tárolására szolgál, amellyel az alkalmazást a közzététel előtt aláírják. Az aláírás garantálja, hogy az alkalmazást valóban a megadott fejlesztő adta ki, és a kódja nem változott a közzététel után. Minden alkalmazásfrissítést ugyanazzal a kulccsal kell aláírni, ellenkező esetben a Google Play elutasítja az APK-t vagy App Bundle-t.
A Keystore több bejegyzést (aliast) tartalmazhat, amelyek mindegyike egy kulcspárt (privát és nyilvános) képvisel tanúsítvánnyal együtt. Alias — a bejegyzés egyedi neve, amely alapján az alkalmazás a kulcshoz fér hozzá az aláírás során. Egy tipikus Android-projektben a Keystore egy bejegyzést tartalmaz a kiadási verzió aláírásához, és további bejegyzéseket tartalmazhat a debug-építmények aláírásához. A Google Play Console megjeleníti a tanúsítvány SHA-1 és SHA-256 ujjlenyomatait minden feltöltött alkalmazáshoz.
Az Android Studio beépített támogatást nyújt a Keystore-hoz a Build → Generate Signed Bundle / APK menün keresztül. Az aláírás varázsló lehetővé teszi új Keystore létrehozását vagy meglévő kiválasztását, az alias, a Keystore- és kulcsjelszavak, valamint a tanúsítási adatok (szervezet neve, város, ország) megadását. Ezek az adatok beágyazódnak a tanúsítványba, és láthatóak a felhasználók számára az APK-aláírás ellenőrzésekor. A Google Play megköveteli, hogy a tanúsítvány érvényessége legalább 25 év legyen — az Android ellenőrzi a lejárati dátumot az alkalmazás telepítésekor.
Az alkalmazás frissítése a Google Play-ben csak ugyanazzal a kulccsal lehetséges, amellyel az első verziót aláírták. Ha a Keystore elveszik, a frissítés közzététele lehetetlen — az alkalmazást új csomagnév (package name) alatt kell újra kiadni. A Google Play Console Help (2026) szerint az alkalmazás aláírási kulcsa csak a Google Play App Signingen keresztül állítható helyre — ez a szolgáltatás a Google oldalán tárolja a kulcsot. Ha a fejlesztő ezt a lehetőséget használta, a helyi Keystore elvesztése nem kritikus.
Az Android-alkalmazás aláírásának folyamata magában foglalja az APK tartalmának kivonatolását (hash) és annak titkosítását a Keystore-ből származó privát kulccsal. Az Android SDK Build Tools tartalmazza az apksigner eszközt, amely az aláírást APK Signature Scheme v2 (vagy Android 9+ esetén v3) formátumban végzi. Az alkalmazás telepítésekor az Android ellenőrzi az aláírást: visszafejti az aláírást a tanúsítvány nyilvános kulcsával, összehasonlítja az APK hash-jét az eredetivel — ha a hash-ek nem egyeznek, a telepítés elutasításra kerül.
Az Android több aláírási sémát támogat: v1 (JAR signing), v2 (APK Signature Scheme), v3 (APK Signature Scheme kulcsrotációs támogatással) és v4 (Android 11+ inkrementális telepítései). A Google Play v2 vagy v3 sémát követel meg az új alkalmazásokhoz. Az apksigner automatikusan hozzáadja az összes szükséges sémát az aláírás során, ha a kulcs támogatja a megfelelő algoritmusokat. Az Android 11+ támogatja az ADB-telepítést v4 aláírással, ami felgyorsítja a nagy APK-fájlok inkrementális betöltését az eszközre.
Algoritmusok: Az Android az RSA-2048 vagy ECDSA P-256 használatát ajánlja az aláírási kulcshoz. A tanúsítványnak X.509 v3-nak kell lennie. Az Android ellenőrzi, hogy a tanúsítvány érvényes-e a telepítés pillanatában — ha lejárt, a telepítés blokkolva van. Éppen ezért a Google azt ajánlja, hogy a tanúsítvány érvényességi idejét legalább 25 évre állítsák be. A Google Play App Signing két kulcsot használ: az alkalmazás aláírási kulcsát (app signing key) és a feltöltési kulcsot (upload key) — a feltöltési kulcsot a fejlesztő használja az APK Console-ba történő feltöltéséhez, a Google pedig a fő kulccsal írja alá az alkalmazást a felhasználók számára.
A Java két fő Keystore-formátumot támogat: JKS (Java KeyStore) — az Oracle saját formátuma, amely a JDK 1.2 óta létezik, és PKCS12 — az RSA Laboratories által szabványosított Public-Key Cryptography Standards #12 formátum. A JKS saját adattárolási formátumot használ, és csak a Java ökoszisztémában támogatott. A PKCS12 egy nyílt szabvány, amelyet a Java, .NET, OpenSSL, Python (cryptography) és a legtöbb más kriptográfiai könyvtár támogat.
A Google Play a PKCS12-t ajánlja preferált formátumként a 2021 után létrehozott új Keystore-okhoz. A JDK 9 és újabb verziók alapértelmezés szerint PKCS12 formátumban hoznak létre Keystore-ot (korábban a JKS volt az alapértelmezett). A PKCS12 fő előnye a kompatibilitás: a .p12 fájl bármilyen, Java-hoz nem kötött környezetben megnyitható. Az OpenSSL képes kinyerni a tanúsítványokat a PKCS12-ből és PEM formátumba konvertálni őket. A JKS-fájlok olvasásához JDK-eszközök szükségesek, és az OpenSSL nem tudja feldolgozni őket.
A formátumok közötti konverziót a JDK keytool eszköze végzi. A JKS-ről PKCS12-re történő migráció során meg kell győződni arról, hogy az összes alias és jelszó megfelelően átkerült. A keytool -importkeystore parancs lehetővé teszi az egyik Keystore tartalmának importálását a másikba, formátumtól függetlenül. A konverzió után a régi JKS-fájlt érdemes törölni a kulcsverziókkal kapcsolatos zavar elkerülése érdekében. Az Android Studio mindkét formátumot támogatja aláírt építmény létrehozásakor.
| Jellemző | JKS | PKCS12 |
|---|---|---|
| Szabvány | Saját (Oracle) | Nyílt (RSA Labs) |
| Kiterjesztés | .jks / .keystore | .p12 / .pfx |
| Támogatás | Csak Java | Java, OpenSSL, .NET, Python |
| Alapértelmezett | JDK 8-ig | JDK 9+ |
| Google ajánlás | Elavult | Preferált |
A keytool eszköz a JDK (Java Development Kit) része, és teljes parancskészletet biztosít a Keystore létrehozásához, megtekintéséhez és kezeléséhez. Új Keystore létrehozásához egy kulcspárral a keytool -genkeypair parancsot használjuk a PKCS12 formátum, RSA algoritmus, kulcsméret és tanúsítvány érvényességi idő megadásával. A Google Play megköveteli a tanúsítvány érvényességét legalább 25 évre (9125 nap) — ezt az értéket ajánlott a -validity paraméterben megadni.
Példa Keystore generálására PKCS12 formátumban Android-projekthez. A -dname paraméter tartalmazza a tanúsítvány X.500 Distinguished Name-jét. A -ext paraméter szükség esetén bekapcsolja a Subject Alternative Name-t — Android esetében a Basic Constraints elegendő:
# PKCS12 Keystore létrehozása Androidhoz
keytool -genkeypair -alias "upload_key" \
-keyalg RSA -keysize 2048 -validity 9125 \
-keystore "release-keystore.p12" \
-storetype PKCS12 \
-dname "CN=Developer,O=Company,C=RU"
A Keytool kérni fogja a Keystore jelszavát és a kulcs jelszavát (lehet azonos is). A -storetype PKCS12 paraméter modern formátumban hozza létre a fájlt. A -keysize 2048 megfelel a Google minimális RSA-kulcsméretre vonatkozó követelményeinek. A -validity 9125 (25 év) biztosítja a kompatibilitást az alkalmazás teljes várható életciklusa alatt. A Keystore létrehozása után ajánlott ellenőrizni a tartalmát a keytool -list -v -keystore release-keystore.p12 paranccsal.
A Keystore bejegyzéseinek ellenőrzéséhez a -list jelzővel ellátott parancsot használjuk. A kimenet tartalmazza az aliast, a létrehozás és lejárat dátumát, a bejegyzés típusát és az SHA-256 ujjlenyomatokat. Az Android Studio ugyanezt az információt jeleníti meg a Generate Signed Bundle / APK párbeszédablakban meglévő Keystore kiválasztásakor:
# Keystore-bejegyzések megtekintése
keytool -list -v -keystore "release-keystore.p12" \
-storetype PKCS12
A CI/CD-folyamatban a Keystore-t biztonságosan kell tárolni, és kompromittálódás kockázata nélkül kell átadni a build-ügynöknek. A GitHub Actions Secrets szolgáltatást biztosít bináris fájlok base64 formátumban történő tárolásához. A Keystore-t a base64 paranccsal kódoljuk, a kapott karakterláncot a repó titkai között tároljuk, a build fázisában pedig visszafejtjük fájllá. A GitLab CI hasonló mechanizmust használ a Variables segítségével File típussal.
Példa CI-build konfigurálására Keystore-ral a GitHub Actions-ben: a Keystore visszafejtése a titokból, a Gradle tulajdonságok konfigurálása és az aláírt build végrehajtása. A Gradle Android beépülő modulja a Keystore elérési útját és a jelszavakat a keystore.properties fájlból (a .gitignore-ból kizárva a helyi fejlesztéshez) vagy a CI-rendszer környezeti változóiból olvassa:
// build.gradle (app) — aláírás konfiguráció
@Override
android {
signingConfigs {
release {
storeFile file("release-keystore.p12")
storePassword System.getenv("STORE_PASSWORD")
keyAlias System.getenv("KEY_ALIAS")
keyPassword System.getenv("KEY_PASSWORD")
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
A Gradle a CI-rendszer által beállított környezeti változókat olvassa. A Keystore fájlnak az alkalmazásmodul gyökérkönyvtárában kell elhelyezkednie, a storeFile-ban megadottak szerint. A biztonság érdekében soha ne tároljon jelszavakat a repóban — használja a CI-rendszer Secrets szolgáltatását. A Fastlane Androidhoz a supply beépülő modult biztosítja, amely a Google Play Console-lal működik, de az APK aláírásához továbbra is helyi Keystore szükséges az ügynökön.
Alternatíva a Google Play App Signing. Ennek az opciónak a használatakor a fejlesztő csak a feltöltési kulcsot (upload key) tölti fel a Google Play-be, a Google pedig a saját kulcsával írja alá a végső APK-t. Ebben az esetben a Keystore csak a feltöltési kulcs létrehozására szolgál, és elvesztése nem blokkolja a frissítéseket — új upload key generálható és regisztrálható a Console-ban. A Google Play App Signing 2021 augusztusa óta kötelező az új alkalmazások számára.
A Keystore elvesztése az egyik legkritikusabb probléma az Android-fejlesztésben. Biztonsági mentés nélkül nem adható ki frissítés a meglévő alkalmazáshoz — a Google Play elutasítja a más kulccsal aláírt APK-t. Javasolt legalább két biztonsági másolatot tárolni a Keystore-ról különböző fizikai vagy felhőalapú tárolókban: például titkosított fájl a csapat felhőtárhelyén és fizikai adathordozó a szervezet széfjében. A Keystore és a kulcs jelszavait a fájltól elkülönítve, például hozzáférés-vezérléssel ellátott jelszókezelőben tároljuk.
Az Android Studio új Keystore létrehozásakor a Generate Signed Bundle / APK párbeszédablakban felajánlja az elérési utak megjegyzését a jövőbeli build-ekhez. Maga a fejlesztői környezet azonban nem készít biztonsági mentést — ez a fejlesztő felelőssége. Csapatmunkához javasolt a Google Play App Signing használata az upload key biztonságos csatornán történő átadásával az összes csapattagnak. A Gradle lehetővé teszi a debug-építmények aláírását automatikusan generált debug.keystore-ral, amely nem igényel biztonsági mentést — azonos az Android Studio összes telepítésénél.
A Keystore biztonsága átvitelkor: a .p12 vagy .jks fájlt csak titkosított csatornákon (SFTP, HTTPS, titkosított e-mail mellékletek) szabad átvinni. Soha ne helyezze a Keystore-t a forráskód repozitóriumba — még privátba sem. A GitGuardian vagy GitHub secret scanning automatikusan észleli a hitelesítő adatok közzétételét, de a Keystore repóban való tárolása továbbra is biztonsági vétség. CI/CD-hez használja a platform titkosítási mechanizmusát (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) infrastruktúra-szintű titkosítással.
Gyakran ismételt kérdések
Ha Google Play App Signing használ, csak az upload key veszett el — generálhat egy újat, és regisztrálhatja a Google Play Console-ban. Ha az App Signing nincs engedélyezve, a Keystore elvesztése az alkalmazás frissíthetetlenségét jelenti — új alkalmazást kell közzétennie más package name-nel.
Igen, egyetlen Keystore több aliast (bejegyzést) tartalmazhat különböző kulcsokkal különböző alkalmazásokhoz. Minden alkalmazáshoz javasolt külön aliast használni ugyanazon a Keystore-on belül. A Google Play támogatja a különböző kulcsokat különböző alkalmazásokhoz — nincs korlátozás egyetlen Keystore több projekthez való használatára.
Az Android mindkét algoritmust támogatja, de az ECDSA P-256 előnyösebb: az RSA-2048-cal egyenértékű biztonságot nyújt kisebb aláírásmérettel és gyorsabb ellenőrzéssel. Ha azonban kompatibilitás szükséges az Android 4.4 és régebbi verziókkal, válassza az RSA-t — az ECDSA csak Android 4.3+-tól támogatott.
Az Android ellenőrzi a tanúsítvány érvényességi idejét az alkalmazás telepítésekor. Ha a tanúsítvány lejárt, a telepítés blokkolva van — még akkor is, ha egy meglévő alkalmazás frissítéséről van szó. A 25 év a Google által ajánlott minimális időtartam, amely lefedi a mobilalkalmazás teljes várható életciklusát anélkül, hogy új tanúsítványt kellene kiadni.
A Debug.keystore automatikusan az Android SDK által jön létre, és debug-építmények aláírására szolgál. Azonos az Android Studio összes telepítésénél (alapértelmezett jelszó: android). A kiadási Keystore-t a fejlesztő hozza létre a Google Play-ben közzétett verzió aláírásához, és biztonságos helyen kell tárolni — elvesztése kritikus.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is