Keystore: ουσία, ποιες μορφές υπάρχουν και πώς λειτουργεί

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-16 Χρόνος ανάγνωσης: 10 λεπ

Το Keystore είναι ένα ασφαλές κρυπτογραφικό αποθετήριο που χρησιμοποιείται στην ανάπτυξη Android για την αποθήκευση ιδιωτικών κλειδιών και πιστοποιητικών υπογραφής εφαρμογών. Σύμφωνα με το Android Developers Documentation, 2026, κάθε APK ή App Bundle πριν από τη δημοσίευση στο Google Play πρέπει να υπογράφεται με ψηφιακή υπογραφή από το Keystore. Θα εξετάσουμε τις μορφές Keystore, τη δημιουργία και τη χρήση στο έργο.

Κύρια Σημεία

  • Keystore — κοντέινερ για αποθήκευση ιδιωτικών κλειδιών και πιστοποιητικών που χρησιμοποιούνται για υπογραφή εφαρμογών Android
  • JKS (Java KeyStore) — παρωχημένη μορφή, περιορισμένη στο οικοσύστημα Java
  • PKCS12 — τυποποιημένη μορφή, συνιστάται από την Google για νέα έργα
  • Keytool — βοηθητικό πρόγραμμα από το JDK για δημιουργία και διαχείριση Keystore από τη γραμμή εντολών
  • Απώλεια Keystore σημαίνει αδυναμία ενημέρωσης της εφαρμογής στο Google Play — η δημιουργία αντιγράφων ασφαλείας είναι υποχρεωτική

Τι είναι το Keystore

Keystore (KeyStore) — είναι ένας τυπικός μηχανισμός Java Cryptography Architecture (JCA) για την αποθήκευση κρυπτογραφικών κλειδιών, πιστοποιητικών και αξιόπιστων εγγραφών. Στην ανάπτυξη Android, το Keystore χρησιμοποιείται για την αποθήκευση του ιδιωτικού κλειδιού με το οποίο υπογράφεται η εφαρμογή πριν από τη δημοσίευση. Η υπογραφή εγγυάται ότι η εφαρμογή κυκλοφόρησε πράγματι από τον συγκεκριμένο προγραμματιστή και ότι ο κώδικάς της δεν τροποποιήθηκε μετά τη δημοσίευση. Κάθε ενημέρωση της εφαρμογής πρέπει να υπογράφεται με το ίδιο κλειδί, διαφορετικά το Google Play θα απορρίψει το APK ή το App Bundle.

Το Keystore μπορεί να περιέχει πολλές εγγραφές (alias), καθεμία από τις οποίες αντιπροσωπεύει ένα ζεύγος κλειδιών (ιδιωτικό και δημόσιο) με ένα πιστοποιητικό. Alias — το μοναδικό όνομα της εγγραφής με το οποίο η εφαρμογή έχει πρόσβαση στο κλειδί κατά την υπογραφή. Σε ένα τυπικό έργο Android, το Keystore περιέχει μία εγγραφή για την υπογραφή της έκδοσης έκδοσης και μπορεί να περιέχει επιπλέον για την υπογραφή debug builds. Η Google Play Console εμφανίζει τα αποτυπώματα SHA-1 και SHA-256 του πιστοποιητικού για κάθε μεταφορτωμένη εφαρμογή.

Το Android Studio περιλαμβάνει ενσωματωμένη υποστήριξη για Keystore μέσω του μενού Build → Generate Signed Bundle / APK. Ο οδηγός υπογραφής του Android Studio επιτρέπει τη δημιουργία νέου Keystore ή την επιλογή υπάρχοντος, τον καθορισμό alias, κωδικών πρόσβασης Keystore και κλειδιού, καθώς και δεδομένων πιστοποίησης (όνομα οργανισμού, πόλη, χώρα). Αυτά τα δεδομένα ενσωματώνονται στο πιστοποιητικό και είναι ορατά στους χρήστες κατά την επαλήθευση της υπογραφής APK. Η Google Play απαιτεί η ισχύς του πιστοποιητικού να είναι τουλάχιστον 25 έτη — το Android ελέγχει την ημερομηνία λήξης κατά την εγκατάσταση της εφαρμογής.

Γιατί είναι σημαντικό το Keystore για το Android

Η ενημέρωση της εφαρμογής στο Google Play είναι δυνατή μόνο με το ίδιο κλειδί με το οποίο υπογράφηκε η πρώτη έκδοση. Εάν το Keystore χαθεί, η δημοσίευση ενημέρωσης είναι αδύνατη — η εφαρμογή θα πρέπει να κυκλοφορήσει ξανά με νέο όνομα πακέτου (package name). Σύμφωνα με το Google Play Console Help (2026), το κλειδί υπογραφής της εφαρμογής μπορεί να ανακτηθεί μόνο μέσω του Google Play App Signing — μιας υπηρεσίας που αποθηκεύει το κλειδί στην πλευρά της Google. Εάν ο προγραμματιστής χρησιμοποίησε αυτήν την επιλογή, η απώλεια του τοπικού Keystore δεν είναι κρίσιμη.

Πώς λειτουργεί το Keystore

Η διαδικασία υπογραφής μιας εφαρμογής Android περιλαμβάνει τη δημιουργία μιας σύνοψης (hash) του περιεχομένου APK και την κρυπτογράφησή της με το ιδιωτικό κλειδί από το Keystore. Τα Android SDK Build Tools περιλαμβάνουν το βοηθητικό πρόγραμμα apksigner που εκτελεί την υπογραφή σε μορφή APK Signature Scheme v2 (ή v3 για Android 9+). Κατά την εγκατάσταση της εφαρμογής, το Android επαληθεύει την υπογραφή: αποκρυπτογραφεί την υπογραφή με το δημόσιο κλειδί του πιστοποιητικού, συγκρίνει το hash του APK με το πρωτότυπο — εάν τα hash δεν ταιριάζουν, η εγκατάσταση απορρίπτεται.

Το Android υποστηρίζει πολλά σχήματα υπογραφής: v1 (JAR signing), v2 (APK Signature Scheme), v3 (APK Signature Scheme με υποστήριξη εναλλαγής κλειδιών) και v4 (σταδιακές εγκαταστάσεις Android 11+). Η Google Play απαιτεί v2 ή v3 για νέες εφαρμογές. Το apksigner προσθέτει αυτόματα όλα τα απαραίτητα σχήματα κατά την υπογραφή, εάν το κλειδί υποστηρίζει τους αντίστοιχους αλγόριθμους. Το Android 11+ υποστηρίζει εγκατάσταση ADB με υπογραφή v4, η οποία επιταχύνει τη σταδιακή φόρτωση μεγάλων αρχείων APK στη συσκευή.

Αλγόριθμοι: Το Android συνιστά τη χρήση RSA-2048 ή ECDSA P-256 για το κλειδί υπογραφής. Το πιστοποιητικό πρέπει να είναι X.509 v3. Το Android ελέγχει εάν το πιστοποιητικό είναι έγκυρο τη στιγμή της εγκατάστασης — εάν έχει λήξει, η εγκατάσταση αποκλείεται. Γι' αυτό η Google συνιστά τον ορισμό της περιόδου ισχύος του πιστοποιητικού σε τουλάχιστον 25 έτη. Το Google Play App Signing χρησιμοποιεί δύο κλειδιά: το κλειδί υπογραφής εφαρμογής (app signing key) και το κλειδί μεταφόρτωσης (upload key) — το κλειδί μεταφόρτωσης χρησιμοποιείται από τον προγραμματιστή για τη μεταφόρτωση APK στο Console, και η Google υπογράφει την εφαρμογή για τους χρήστες με το κύριο κλειδί.

Μορφές Keystore: JKS και PKCS12

Η Java υποστηρίζει δύο κύριες μορφές Keystore: JKS (Java KeyStore) — η ιδιόκτητη μορφή της Oracle, που υπάρχει από το JDK 1.2, και PKCS12 — η τυποποιημένη μορφή Public-Key Cryptography Standards #12 από την RSA Laboratories. Η JKS χρησιμοποιεί τη δική της μορφή αποθήκευσης δεδομένων και υποστηρίζεται μόνο στο οικοσύστημα Java. Η PKCS12 είναι ένα ανοιχτό πρότυπο που υποστηρίζεται από Java, .NET, OpenSSL, Python (cryptography) και τις περισσότερες άλλες κρυπτογραφικές βιβλιοθήκες.

Η Google Play συνιστά την PKCS12 ως την προτιμώμενη μορφή για νέα Keystore που δημιουργούνται μετά το 2021. Το JDK 9 και νεότερες εκδόσεις δημιουργούν από προεπιλογή Keystore σε μορφή PKCS12 (προηγουμένως η προεπιλογή ήταν JKS). Το κύριο πλεονέκτημα της PKCS12 είναι η συμβατότητα: το αρχείο .p12 μπορεί να ανοιχτεί σε οποιοδήποτε περιβάλλον που δεν είναι δεσμευμένο στην Java. Το OpenSSL μπορεί να εξάγει πιστοποιητικά από PKCS12 και να τα μετατρέψει σε μορφή PEM. Τα αρχεία JKS απαιτούν βοηθητικά προγράμματα JDK για ανάγνωση και δεν μπορούν να υποστούν επεξεργασία από το OpenSSL.

Η μετατροπή μεταξύ μορφών πραγματοποιείται με το βοηθητικό πρόγραμμα keytool από το JDK. Κατά τη μετεγκατάσταση από JKS σε PKCS12, πρέπει να βεβαιωθείτε ότι όλα τα alias και οι κωδικοί πρόσβασης έχουν μεταφερθεί σωστά. Η εντολή keytool -importkeystore επιτρέπει την εισαγωγή περιεχομένου από ένα Keystore σε άλλο ανεξάρτητα από τη μορφή. Μετά τη μετατροπή, είναι προτιμότερο να διαγράψετε το παλιό αρχείο JKS για να αποφύγετε σύγχυση με εκδόσεις κλειδιών. Το Android Studio υποστηρίζει και τις δύο μορφές κατά τη δημιουργία υπογεγραμμένου build.

ΧαρακτηριστικόJKSPKCS12
ΠρότυποΙδιόκτητο (Oracle)Ανοιχτό (RSA Labs)
Επέκταση.jks / .keystore.p12 / .pfx
ΥποστήριξηΜόνο JavaJava, OpenSSL, .NET, Python
ΠροεπιλογήΜέχρι JDK 8JDK 9+
Σύσταση GoogleΠαρωχημένοΠροτιμώμενο

Δημιουργία Keystore μέσω keytool

Το βοηθητικό πρόγραμμα keytool αποτελεί μέρος του JDK (Java Development Kit) και παρέχει ένα πλήρες σύνολο εντολών για δημιουργία, προβολή και διαχείριση Keystore. Για τη δημιουργία ενός νέου Keystore με ένα ζεύγος κλειδιών, χρησιμοποιείται η εντολή keytool -genkeypair με καθορισμό της μορφής PKCS12, του αλγόριθμου RSA, του μεγέθους κλειδιού και της περιόδου ισχύος του πιστοποιητικού. Η Google Play απαιτεί ισχύ πιστοποιητικού τουλάχιστον 25 ετών (9125 ημέρες) — αυτή η τιμή συνιστάται να καθορίζεται στην παράμετρο -validity.

Δημιουργία νέου Keystore

Παράδειγμα δημιουργίας Keystore σε μορφή PKCS12 για έργο Android. Η παράμετρος -dname περιέχει το X.500 Distinguished Name του πιστοποιητικού. Η παράμετρος -ext θα ενεργοποιήσει το Subject Alternative Name, εάν απαιτείται — για Android, αρκούν τα Basic Constraints:

bash
# Δημιουργία PKCS12 Keystore για Android
keytool -genkeypair -alias "upload_key" \
  -keyalg RSA -keysize 2048 -validity 9125 \
  -keystore "release-keystore.p12" \
  -storetype PKCS12 \
  -dname "CN=Developer,O=Company,C=RU"

Το Keytool θα ζητήσει τον κωδικό πρόσβασης Keystore και τον κωδικό πρόσβασης κλειδιού (μπορεί να είναι ίδιοι). Η παράμετρος -storetype PKCS12 δημιουργεί το αρχείο σε σύγχρονη μορφή. Το -keysize 2048 αντιστοιχεί στις απαιτήσεις της Google για ελάχιστο μέγεθος κλειδιού RSA. Το -validity 9125 (25 έτη) εξασφαλίζει συμβατότητα για ολόκληρο τον αναμενόμενο κύκλο ζωής της εφαρμογής. Μετά τη δημιουργία του Keystore, συνιστάται ο έλεγχος του περιεχομένου του με την εντολή keytool -list -v -keystore release-keystore.p12.

Προβολή περιεχομένου Keystore

Για τον έλεγχο των εγγραφών Keystore, χρησιμοποιείται η εντολή με τη σημαία -list. Η έξοδος περιλαμβάνει το alias, τις ημερομηνίες δημιουργίας και λήξης, τον τύπο εγγραφής και τα αποτυπώματα SHA-256. Το Android Studio εμφανίζει τις ίδιες πληροφορίες στο παράθυρο διαλόγου Generate Signed Bundle / APK κατά την επιλογή υπάρχοντος Keystore:

bash
# Προβολή εγγραφών Keystore
keytool -list -v -keystore "release-keystore.p12" \
  -storetype PKCS12

Χρήση Keystore σε CI/CD

Στη γραμμή CI/CD, το Keystore πρέπει να αποθηκεύεται με ασφάλεια και να μεταφέρεται στον agent build χωρίς κίνδυνο παραβίασης. Το GitHub Actions παρέχει Secrets για την αποθήκευση δυαδικών αρχείων σε μορφή base64. Το Keystore κωδικοποιείται με την εντολή base64, η προκύπτουσα συμβολοσειρά αποθηκεύεται στα μυστικά του αποθετηρίου και στο στάδιο build αποκωδικοποιείται πίσω σε αρχείο. Το GitLab CI χρησιμοποιεί παρόμοιο μηχανισμό μέσω Variables με τύπο File.

Ένα παράδειγμα ρύθμισης CI build με Keystore στο GitHub Actions περιλαμβάνει την αποκωδικοποίηση του Keystore από το μυστικό, τη ρύθμιση ιδιοτήτων Gradle και την εκτέλεση του υπογεγραμμένου build. Το Gradle του πρόσθετου Android διαβάζει τη διαδρομή προς το Keystore και τους κωδικούς πρόσβασης από το αρχείο keystore.properties (εξαιρείται από το .gitignore για τοπική ανάπτυξη) ή από μεταβλητές περιβάλλοντος του συστήματος CI:

groovy
// build.gradle (app) — διαμόρφωση υπογραφής
@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
        }
    }
}

Το Gradle διαβάζει τις μεταβλητές περιβάλλοντος που ορίζονται από το σύστημα CI. Το αρχείο Keystore πρέπει να βρίσκεται στον ριζικό κατάλογο της μονάδας εφαρμογής, όπως καθορίζεται στο storeFile. Για ασφάλεια, μην αποθηκεύετε ποτέ κωδικούς πρόσβασης στο αποθετήριο — χρησιμοποιήστε τα Secrets του συστήματος CI. Το Fastlane για Android παρέχει το πρόσθετο supply που λειτουργεί με το Google Play Console, αλλά η υπογραφή APK εξακολουθεί να απαιτεί τοπικό Keystore στον agent.

Εναλλακτική είναι το Google Play App Signing. Κατά τη χρήση αυτής της επιλογής, ο προγραμματιστής μεταφορτώνει στο Google Play μόνο το κλειδί μεταφόρτωσης (upload key), και η Google υπογράφει το τελικό APK με το δικό της κλειδί. Σε αυτήν την περίπτωση, το Keystore χρησιμοποιείται μόνο για τη δημιουργία του κλειδιού μεταφόρτωσης και η απώλειά του δεν εμποδίζει τις ενημερώσεις — μπορεί να δημιουργηθεί νέο upload key και να καταχωρηθεί στο Console. Το Google Play App Signing είναι υποχρεωτικό για νέες εφαρμογές από τον Αύγουστο του 2021.

Ασφάλεια και αντίγραφα ασφαλείας Keystore

Η απώλεια του Keystore είναι ένα από τα πιο κρίσιμα προβλήματα στην ανάπτυξη Android. Χωρίς αντίγραφο ασφαλείας του Keystore, δεν είναι δυνατή η κυκλοφορία ενημέρωσης της υπάρχουσας εφαρμογής — η Google Play απορρίπτει APK υπογεγραμμένο με διαφορετικό κλειδί. Συνιστάται η αποθήκευση τουλάχιστον δύο αντιγράφων ασφαλείας του Keystore σε διαφορετικές φυσικές ή cloud αποθηκεύσεις: για παράδειγμα, κρυπτογραφημένο αρχείο στο cloud αποθήκευσης της ομάδας και φυσικό μέσο στο χρηματοκιβώτιο του οργανισμού. Οι κωδικοί πρόσβασης Keystore και κλειδιού αποθηκεύονται χωριστά από το αρχείο, για παράδειγμα σε διαχειριστή κωδικών πρόσβασης με έλεγχο πρόσβασης.

Το Android Studio κατά τη δημιουργία νέου Keystore στο παράθυρο διαλόγου Generate Signed Bundle / APK προσφέρει να απομνημονεύσει τις διαδρομές για μελλοντικά builds. Ωστόσο, το ίδιο το περιβάλλον ανάπτυξης δεν δημιουργεί αντίγραφο ασφαλείας — αυτό είναι ευθύνη του προγραμματιστή. Για ομαδική ανάπτυξη, συνιστάται η χρήση του Google Play App Signing με μεταφορά του upload key μέσω ασφαλούς καναλιού σε όλα τα μέλη της ομάδας. Το Gradle επιτρέπει την υπογραφή debug builds με αυτόματα δημιουργημένο debug.keystore, το οποίο δεν απαιτεί δημιουργία αντιγράφων ασφαλείας — είναι το ίδιο για όλες τις εγκαταστάσεις του Android Studio.

Ασφάλεια Keystore κατά τη μεταφορά: το αρχείο .p12 ή .jks πρέπει να μεταφέρεται μόνο μέσω κρυπτογραφημένων καναλιών (SFTP, HTTPS, κρυπτογραφημένα συνημμένα email). Μην συμπεριλαμβάνετε ποτέ το Keystore στο αποθετήριο πηγαίου κώδικα — ακόμη και ιδιωτικό. Το GitGuardian ή GitHub secret scanning ανιχνεύουν αυτόματα τη δημοσίευση διαπιστευτηρίων, αλλά η αποθήκευση του Keystore στο αποθετήριο εξακολουθεί να αποτελεί παραβίαση ασφαλείας. Για CI/CD, χρησιμοποιήστε τον μηχανισμό μυστικών της πλατφόρμας (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) με κρυπτογράφηση σε επίπεδο υποδομής.

Συχνές Ερωτήσεις

Τι συμβαίνει εάν χάσω το Keystore μετά τη δημοσίευση της εφαρμογής;

Εάν χρησιμοποιείτε Google Play App Signing, χάθηκε μόνο το upload key — μπορείτε να δημιουργήσετε ένα νέο και να το καταχωρήσετε στο Google Play Console. Εάν το App Signing δεν είναι ενεργοποιημένο, η απώλεια του Keystore σημαίνει αδυναμία ενημέρωσης της εφαρμογής — θα πρέπει να δημοσιεύσετε μια νέα εφαρμογή με διαφορετικό package name.

Μπορεί ένα Keystore να χρησιμοποιηθεί για πολλές εφαρμογές;

Ναι, ένα Keystore μπορεί να περιέχει πολλαπλά alias (εγγραφές) με διαφορετικά κλειδιά για διαφορετικές εφαρμογές. Για κάθε εφαρμογή, συνιστάται η χρήση ξεχωριστού alias εντός του ίδιου Keystore. Το Google Play υποστηρίζει διαφορετικά κλειδιά για διαφορετικές εφαρμογές — δεν υπάρχει περιορισμός στη χρήση ενός Keystore για πολλά έργα.

Ποιος αλγόριθμος υπογραφής είναι καλύτερος — RSA ή ECDSA;

Το Android υποστηρίζει και τους δύο αλγόριθμους, αλλά το ECDSA P-256 είναι προτιμότερο: παρέχει ισοδύναμη ασφάλεια με RSA-2048 με μικρότερο μέγεθος υπογραφής και ταχύτερη επαλήθευση. Ωστόσο, εάν απαιτείται συμβατότητα με Android 4.4 και παλαιότερες εκδόσεις, επιλέξτε RSA — το ECDSA υποστηρίζεται μόνο από Android 4.3+.

Γιατί η Google Play απαιτεί πιστοποιητικό με ισχύ 25 ετών και άνω;

Το Android ελέγχει την περίοδο ισχύος του πιστοποιητικού κατά την εγκατάσταση της εφαρμογής. Εάν το πιστοποιητικό έχει λήξει, η εγκατάσταση αποκλείεται — ακόμη και αν πρόκειται για ενημέρωση υπάρχουσας εφαρμογής. Τα 25 έτη είναι η ελάχιστη περίοδος που συνιστά η Google για να καλύψει ολόκληρο τον αναμενόμενο κύκλο ζωής μιας εφαρμογής κινητού χωρίς την ανάγκη έκδοσης νέου πιστοποιητικού.

Ποια είναι η διαφορά μεταξύ debug.keystore και Keystore έκδοσης;

Το Debug.keystore δημιουργείται αυτόματα από το Android SDK και χρησιμοποιείται για την υπογραφή debug builds. Είναι το ίδιο για όλες τις εγκαταστάσεις του Android Studio (προεπιλεγμένος κωδικός android). Το Keystore έκδοσης δημιουργείται από τον προγραμματιστή για την υπογραφή της έκδοσης που δημοσιεύεται στο Google Play και πρέπει να φυλάσσεται με ασφάλεια — η απώλειά του είναι κρίσιμη.

Σύνοψη

  • Keystore — κρυπτογραφικό αποθετήριο για το ιδιωτικό κλειδί υπογραφής εφαρμογών Android
  • JKS — παρωχημένη μορφή, PKCS12 — σύγχρονο πρότυπο που συνιστάται από την Google
  • Keytool — εργαλείο JDK για δημιουργία και διαχείριση Keystore από γραμμή εντολών
  • Περίοδος ισχύος πιστοποιητικού πρέπει να είναι τουλάχιστον 25 έτη (9125 ημέρες) για Google Play
  • CI/CD απαιτεί αποθήκευση Keystore σε μυστικά πλατφόρμας με κωδικοποίηση base64
  • Google Play App Signing μειώνει τους κινδύνους απώλειας κλειδιού με αποθήκευση στην πλευρά Google
  • Δημιουργία αντιγράφων ασφαλείας Keystore είναι υποχρεωτική — η απώλεια κλειδιού εμποδίζει τις ενημερώσεις εφαρμογής

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης