24 August 2013

การอ่าน Certificate Fingerprint จาก Keystore

Updated on

       ที่ต้องทำบทความนี้ก็เนื่องมาจากยังมีผู้ที่หลงเข้ามาอ่านไม่เข้าใจใน GMapsV2 ซึ่งตอนทดสอบแอปฯในเครื่องจะใช้รหัส SHA1 จากไฟล์ Debug.keystore แต่เมื่อจะ Export เป็น APK เพื่ออัพขึ้น Play Store ก็จะต้องเปลี่ยน Keystore ด้วย


        ก่อนอื่นขออธิบายเรื่อง debug.keystore กันก่อน เพื่อให้เข้าใจกับไฟล์ตัวนี้ เวลาที่ผู้ที่หลงเข้ามาอ่านกดปุ่ม Run เพื่อทดสอบแอปพลิเคชันทุกครั้ง โปรแกรมก็จะทำการ Compile ไฟล์ออกมาเป็น APK นั่นแหละ



        เพียงแต่ตอน Export ไฟล์ Keystore ที่ใช้จะเป็นของ debug.keystore ซึ่ง APK ดังกล่าวจะไม่สามารถนำไปอัพขึ้น Play Store ได้ ทั้งนี้เพื่อใช้ในการ Debug หรือทดสอบแอปพลิเคชันเท่านั้น

        Export จาก debug.keystore จะเรียกกันว่าเป็น Debug Keystore

        Export จากไฟล์ Keystore เพื่ออัพขึ้น Play Store เรียกว่า Signed Keystore

        ซึ่งในการทำบางแอปฯอย่าง GMapsV2 ที่ต้องอ่านรหัส SHA1 เพื่อไปขอ API Key ตอนทดสอบก็จะต้องใช้ Debug Keystore ก่อน เพราะตอนที่ทดสอบบนเครื่องจะใช้ debug.keystore ในการ Export แต่เมื่อทำเสร็จแล้ว และต้องการอัพขึ้น Play Store ก็ต้องเปลี่ยนด้วย โดยไปใช้ SHA1 ของ Signed Keystore ที่ใช้ เพื่อไปขอ API Key ใหม่ จึงจะอัพขึ้น Play Store แล้วใช้งาน GMapsV2 ได้ (ถามมากันเยอะ)

        พูดไปคร่าวๆแล้ว คราวนี้ก็มาดูการดึงค่า Certificate Fingerprint กันบ้าง คงจะคุ้นเคยกับคำสั่งดึงค่า SHA1 จาก debug.keystore กันมาแล้ว
keytool -list -v -keystore ~/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -v
        ใครที่ยังไม่รู้ว่าพิมคำสั่งนี้ตรงไหนดูที่บทความนี้เลย หัวข้อ Certificate Fingerprint รู้จักกับ Keystore และ Debug/Signed Keystore

        กลับมาดูที่คำสั่งข้างบนนี้ ให้สังเกตดีๆตรงตัวหนังสือสีแดงนะ จะเห็นว่าเจ้าของบล็อกเน้นสีตัวอักษรไว้ทั้งหมดสามชุดด้วยกัน

        ที่เน้นตัวอักษรไว้ก็คือ
                - รหัสผ่านของ Keystore
                - ชื่อ Key หรือ Alias
                - รหัสผ่านของ Key หรือ Alias

        ซึ่งไฟล์ debug.keystore ของทุกเครื่อง จะถูกกำหนดไว้ตายตัวอยู่แล้วว่ารหัสผ่านของ Keystore คือ android ชื่อ Alias คือ androiddebugkey และรหัสของ Alias คือ android นั่นเอง (เรียงตามลำดับ)

        ส่วนที่เน้นด้วยสีเขียว คือที่อยู่ของไฟล์ Keystore นั่นเอง ก็ให้เปลี่ยนเป็น Path ของไฟล์ Keystore ที่เก็บไว้


        ดังนั้นถ้าจะอ่าน Certificate Fingerprint ใน Signed Keystore ก็จะต้องแก้ค่าทั้งสามให้ตรงกับไฟล์ Keystore ที่ใช้ด้วยนั่นเอง (ซึ่งบทความตอนสร้าง Keystore เจ้าของบล็อกเน้นย้ำว่าให้จำไว้) สมมติว่า Keystore ที่เจ้าของบล็อกสร้างขึ้นมาได้กำหนดไว้ดังนี้


        ดังนั้นคำสั่งที่จะต้องเปลี่ยน ก็จะออกมาเป็นดังนี้

keytool -list -v -keystore “D:/Work/Android Apps/MyKeystore/SleepingForLess.keystore” -storepass 123456789 -alias sleepingforless -keypass 1150 -v


        ผลที่ได้ก็จะออกมาเป็นแบบนี้

        ก็เป็นอันเรียบร้อย นำรหัส SHA1 ไปใช้ได้เลย หรือจะรหัสอื่นก็ตามแต่