Keystore คือพื้นที่จัดเก็บการเข้ารหัสที่ปลอดภัยซึ่งใช้ในการพัฒนา Android สำหรับเก็บคีย์ส่วนตัวและใบรับรองลายเซ็นแอป ตาม Android Developers Documentation, 2026 ทุก APK หรือ App Bundle จะต้องเซ็นด้วยลายเซ็นดิจิทัลจาก Keystore ก่อนเผยแพร่บน Google Play มาดู รูปแบบ Keystore การสร้างและการใช้งานในโปรเจกต์กัน
ประเด็นสำคัญ
Keystore (KeyStore) เป็นกลไกมาตรฐานของ Java Cryptography Architecture (JCA) สำหรับเก็บคีย์การเข้ารหัส ใบรับรอง และรายการที่เชื่อถือได้ ในการพัฒนา Android Keystore ใช้สำหรับเก็บคีย์ส่วนตัวที่ใช้เซ็นแอปก่อนเผยแพร่ ลายเซ็นรับประกันว่าแอปถูกเผยแพร่โดยนักพัฒนาที่ระบุจริงและโค้ดของมันไม่ถูกเปลี่ยนแปลงหลังเผยแพร่ การอัปเดตแอปทุกครั้งต้องเซ็นด้วยคีย์เดียวกัน มิฉะนั้น Google Play จะปฏิเสธ APK หรือ App Bundle
Keystore สามารถมีหลายรายการ (นามแฝง) แต่ละรายการแทนคู่คีย์ (ส่วนตัวและสาธารณะ) พร้อมใบรับรอง นามแฝง (Alias) คือชื่อรายการที่ไม่ซ้ำกันซึ่งแอปใช้เข้าถึงคีย์ระหว่างการเซ็น ในโปรเจกต์ Android ทั่วไป Keystore มีหนึ่งรายการสำหรับเซ็นเวอร์ชันเผยแพร่ และอาจมีรายการเพิ่มเติมสำหรับเซ็นบิลด์ดีบัก Google Play Console แสดงลายพิมพ์นิ้วมือ SHA-1 และ SHA-256 ของใบรับรองสำหรับแต่ละแอปที่อัปโหลด
Android Studio มีการสนับสนุน Keystore ในตัวผ่านเมนู Build → Generate Signed Bundle / APK ตัวช่วยสร้างลายเซ็นของ Android Studio ช่วยให้คุณสร้าง Keystore ใหม่หรือเลือกที่มีอยู่ ระบุนามแฝง รหัสผ่าน Keystore และคีย์ รวมถึงข้อมูลใบรับรอง (ชื่อองค์กร เมือง ประเทศ) ข้อมูลนี้ถูกฝังในใบรับรองและปรากฏแก่ผู้ใช้เมื่อตรวจสอบลายเซ็น APK Google Play กำหนดให้ใบรับรองมีอายุอย่างน้อย 25 ปี — Android ตรวจสอบวันหมดอายุเมื่อติดตั้งแอป
การอัปเดตแอป บน Google Play ทำได้เฉพาะกับคีย์เดียวกับที่เซ็นเวอร์ชันแรกเท่านั้น หาก Keystore สูญหาย จะไม่สามารถเผยแพร่อัปเดตได้ — แอปจะต้องเผยแพร่ใหม่ภายใต้ชื่อแพ็กเกจอื่น ตาม Google Play Console Help (2026) คีย์เซ็นแอปสามารถกู้คืนได้ผ่าน Google Play App Signing เท่านั้น — บริการที่เก็บคีย์ไว้ฝั่ง Google หากนักพัฒนาใช้ตัวเลือกนี้ การสูญเสีย Keystore ในเครื่องจะไม่วิกฤต
กระบวนการเซ็นแอป Android เกี่ยวข้องกับการสร้างไดเจสต์ (แฮช) ของเนื้อหา APK และการเข้ารหัสด้วยคีย์ส่วนตัวจาก Keystore Android SDK Build Tools มียูทิลิตี้ apksigner ซึ่งดำเนินการเซ็นด้วย APK Signature Scheme v2 (หรือ v3 สำหรับ Android 9+) เมื่อติดตั้งแอป Android ตรวจสอบลายเซ็น: ถอดรหัสลายเซ็นด้วยคีย์สาธารณะของใบรับรอง เปรียบเทียบแฮช APK กับต้นฉบับ — หากแฮชไม่ตรงกัน การติดตั้งจะถูกปฏิเสธ
Android รองรับหลายรูปแบบลายเซ็น: v1 (การเซ็น JAR), 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 เซ็นแอปสำหรับผู้ใช้ด้วยคีย์หลัก
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 ตรวจสอบให้แน่ใจว่านามแฝงและรหัสผ่านทั้งหมดถูกโอนย้ายอย่างถูกต้อง คำสั่ง keytool -importkeystore อนุญาตให้นำเข้าเนื้อหาของ Keystore หนึ่งไปยังอีกที่หนึ่งโดยไม่ขึ้นกับรูปแบบ หลังจากแปลง ควรลบไฟล์ JKS เก่าเพื่อหลีกเลี่ยงความสับสนกับเวอร์ชันคีย์ Android Studio รองรับทั้งสองรูปแบบเมื่อสร้างบิลด์ที่เซ็นแล้ว
| คุณลักษณะ | JKS | PKCS12 |
|---|---|---|
| มาตรฐาน | กรรมสิทธิ์ (Oracle) | เปิด (RSA Labs) |
| นามสกุล | .jks / .keystore | .p12 / .pfx |
| การรองรับ | เฉพาะ Java | Java, OpenSSL, .NET, Python |
| ค่าเริ่มต้น | ถึง JDK 8 | JDK 9+ |
| คำแนะนำของ Google | เดิม | ต้องการ |
ยูทิลิตี้ keytool เป็นส่วนหนึ่งของ JDK (Java Development Kit) และให้ชุดคำสั่งที่สมบูรณ์สำหรับสร้าง ดู และจัดการ Keystore ในการสร้าง Keystore ใหม่ด้วยคู่คีย์เดียว ใช้คำสั่ง keytool -genkeypair โดยระบุรูปแบบ PKCS12 อัลกอริทึม RSA ขนาดคีย์ และอายุใบรับรอง Google Play ต้องการอายุใบรับรองอย่างน้อย 25 ปี (9125 วัน) — แนะนำให้ระบุค่านี้ในพารามิเตอร์ -validity
ตัวอย่างการสร้าง Keystore ในรูปแบบ PKCS12 สำหรับโปรเจกต์ Android พารามิเตอร์ -dname มีชื่อ Distinguished Name X.500 ของใบรับรอง พารามิเตอร์ -ext รวม Subject Alternative Name หากจำเป็น — สำหรับ Android Basic Constraints ก็เพียงพอ:
# การสร้าง 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 ให้ใช้คำสั่งพร้อมแฟล็ก -list ผลลัพธ์ประกอบด้วยนามแฝง วันที่สร้างและหมดอายุ ประเภทรายการ และลายพิมพ์นิ้วมือ SHA-256 Android Studio แสดงข้อมูลเดียวกันในไดอะล็อก Generate Signed Bundle / APK เมื่อเลือก Keystore ที่มีอยู่:
# การดูรายการ Keystore
keytool -list -v -keystore "release-keystore.p12" \
-storetype PKCS12
ในไปป์ไลน์ CI/CD Keystore ต้องถูกจัดเก็บอย่างปลอดภัยและส่งต่อไปยังเอเยนต์บิลด์โดยไม่มีความเสี่ยงในการถูกบุกรุก GitHub Actions มี Secrets สำหรับจัดเก็บไฟล์ไบนารีในรูปแบบ base64 Keystore ถูกเข้ารหัสด้วยคำสั่ง base64 สตริงผลลัพธ์ถูกบันทึกในซีเคร็ตของรีพอสิทอรี และในขั้นตอนบิลด์จะถูกถอดรหัสกลับเป็นไฟล์ GitLab CI ใช้กลไกคล้ายคลึงกันผ่าน Variables ชนิด File
ตัวอย่างการตั้งค่าบิลด์ CI ด้วย Keystore ใน GitHub Actions รวมถึงการถอดรหัส Keystore จากซีเคร็ต การกำหนดค่าคุณสมบัติ Gradle และการดำเนินการบิลด์ที่เซ็นแล้ว Gradle ปลั๊กอิน Android อ่านเส้นทาง Keystore และรหัสผ่านจากไฟล์ keystore.properties (ไม่รวมอยู่ใน .gitignore สำหรับการพัฒนาในเครื่อง) หรือจากตัวแปรสภาพแวดล้อมของระบบ CI:
// 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 ในเครื่องบนเอเยนต์
ทางเลือกคือ Google Play App Signing เมื่อใช้ตัวเลือกนี้ นักพัฒนาอัปโหลดเฉพาะคีย์อัปโหลด (upload key) ไปยัง Google Play และ Google เซ็น APK สุดท้ายด้วยคีย์ของตัวเอง ในกรณีนี้ Keystore ใช้สำหรับสร้างคีย์อัปโหลดเท่านั้น และการสูญเสียมันไม่บล็อกการอัปเดต — สามารถสร้างคีย์อัปโหลดใหม่และลงทะเบียนใน Console Google Play App Signing เป็นสิ่งจำเป็นสำหรับแอปพลิเคชันใหม่ตั้งแต่สิงหาคม 2021
การสูญเสีย Keystore เป็นหนึ่งในปัญหาที่สำคัญที่สุดในการพัฒนา Android หากไม่มีข้อมูลสำรอง จะไม่สามารถเผยแพร่อัปเดตของแอปพลิเคชันที่มีอยู่ได้ — Google Play ปฏิเสธ APK ที่เซ็นด้วยคีย์อื่น แนะนำให้เก็บสำเนาสำรอง Keystore อย่างน้อยสองชุดในพื้นที่จัดเก็บทางกายภาพหรือคลาวด์ที่แตกต่างกัน: ตัวอย่างเช่น ไฟล์ที่เข้ารหัสในที่จัดเก็บคลาวด์ของทีมและสื่อทางกายภาพในตู้เซฟขององค์กร รหัสผ่าน Keystore และคีย์จะถูกเก็บแยกจากไฟล์ เช่น ในตัวจัดการรหัสผ่านที่มีการควบคุมการเข้าถึง
Android Studio เมื่อสร้าง Keystore ใหม่ในไดอะล็อก Generate Signed Bundle / APK เสนอให้จดจำเส้นทางสำหรับบิลด์ในอนาคต อย่างไรก็ตาม สภาพแวดล้อมการพัฒนาไม่ได้สร้างข้อมูลสำรอง — นี่คือความรับผิดชอบของนักพัฒนา สำหรับการพัฒนาทีม แนะนำให้ใช้ Google Play App Signing โดยส่งคีย์อัปโหลดผ่านช่องทางที่ปลอดภัยไปยังสมาชิกทีมทุกคน Gradle สามารถเซ็นบิลด์ดีบักโดยอัตโนมัติด้วย debug.keystore ที่สร้างขึ้น ซึ่งไม่ต้องการการสำรองข้อมูล — มันเหมือนกันสำหรับการติดตั้ง Android Studio ทั้งหมด
ความปลอดภัยของ Keystore ระหว่างการถ่ายโอน: ไฟล์ .p12 หรือ .jks ควรถูกถ่ายโอนผ่านช่องทางที่เข้ารหัสเท่านั้น (SFTP, HTTPS, ไฟล์แนบอีเมลที่เข้ารหัส) ห้ามรวม Keystore ในรีพอสิทอรีซอร์สโค้ด — แม้แต่รีพอสิทอรีส่วนตัว GitGuardian หรือ GitHub secret scanning ตรวจจับการเผยแพร่ข้อมูลรับรองโดยอัตโนมัติ แต่การเก็บ Keystore ในรีพอสิทอรียังคงเป็นการละเมิดความปลอดภัย สำหรับ CI/CD ให้ใช้กลไกซีเคร็ตของแพลตฟอร์ม (GitHub Actions Secrets, GitLab CI Variables, Jenkins Credentials) พร้อมการเข้ารหัสระดับโครงสร้างพื้นฐาน
คำถามที่พบบ่อย
หากคุณใช้ Google Play App Signing จะสูญเสียเฉพาะคีย์อัปโหลด — คุณสามารถสร้างคีย์ใหม่และลงทะเบียนใน Google Play Console หากไม่ได้เปิดใช้งาน App Signing การสูญเสีย Keystore หมายถึงคุณไม่สามารถอัปเดตแอปพลิเคชันได้ — คุณจะต้องเผยแพร่แอปพลิเคชันใหม่ด้วยชื่อแพ็กเกจอื่น
ได้ Keystore หนึ่งสามารถมีหลายนามแฝง (รายการ) ด้วยคีย์ต่างกันสำหรับแอปพลิเคชันต่างกัน แนะนำให้ใช้นามแฝงแยกต่างหากสำหรับแต่ละแอปพลิเคชันภายใน Keystore เดียวกัน Google Play รองรับคีย์ต่างกันสำหรับแอปพลิเคชันต่างกัน — ไม่มีข้อจำกัดในการใช้ Keystore เดียวสำหรับหลายโปรเจกต์
Android รองรับทั้งสองอัลกอริทึม แต่ ECDSA P-256 ดีกว่า: ให้ความปลอดภัยเทียบเท่า RSA-2048 ด้วยขนาดลายเซ็นที่เล็กกว่าและการตรวจสอบที่เร็วกว่า อย่างไรก็ตาม หากต้องการความเข้ากันได้กับ Android 4.4 และต่ำกว่า ให้เลือก RSA — ECDSA รองรับเฉพาะ Android 4.3+ เท่านั้น
Android ตรวจสอบอายุของใบรับรองเมื่อติดตั้งแอปพลิเคชัน หากใบรับรองหมดอายุ การติดตั้งจะถูกบล็อก — แม้ว่าจะเป็นการอัปเดตของแอปพลิเคชันที่มีอยู่ก็ตาม 25 ปี เป็นระยะเวลาขั้นต่ำที่ Google แนะนำเพื่อครอบคลุมวงจรชีวิตที่คาดหวังทั้งหมดของแอปพลิเคชันมือถือโดยไม่จำเป็นต้องออกใบรับรองใหม่
Debug.keystore ถูกสร้างขึ้นโดยอัตโนมัติโดย Android SDK และใช้สำหรับเซ็นบิลด์ดีบัก มันเหมือนกันสำหรับการติดตั้ง Android Studio ทั้งหมด (รหัสผ่านมาตรฐาน: android) Keystore เผยแพร่ถูกสร้างขึ้นโดยนักพัฒนาเพื่อเซ็นเวอร์ชันที่เผยแพร่บน Google Play และต้องเก็บไว้อย่างปลอดภัย — การสูญเสียมันเป็นเรื่องสำคัญ
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ
อ่านเพิ่มเติม