การทำความเข้าใจที่เก็บคีย์ใบรับรองและนามแฝง


96

ที่เก็บคีย์เป็นใบรับรองจริงหรือเป็นชื่อแทนใบรับรอง?

หากฉันใช้นามแฝงอื่นในการลงนามแอปจะทำให้การอัปเดตในตลาดยุ่งหรือไม่ หรือฉันจะต้องลงนามแอปด้วยคีย์สโตร์อื่นเพื่อทำสิ่งต่างๆให้วุ่นวาย และข้อมูลภายใต้นามแฝงสามารถดูได้จากที่ไหน?

คำตอบ:


127

ไฟล์ที่เก็บคีย์ที่สร้างโดยKeytool จะเก็บคีย์ส่วนตัวและคีย์สาธารณะคู่กัน แต่ละคู่หรือรายการที่จัดเก็บในที่เก็บคีย์จะอ้างอิงโดยนามแฝงที่ไม่ซ้ำกัน โดยสรุป:

รายการคีย์สโตร์ = ส่วนตัว + คู่คีย์สาธารณะ = ระบุโดยนามแฝง

ที่เก็บคีย์ปกป้องคีย์ส่วนตัวแต่ละคีย์ด้วยรหัสผ่านของแต่ละบุคคลและยังปกป้องความสมบูรณ์ของที่เก็บคีย์ทั้งหมดด้วยรหัสผ่าน (อาจแตกต่างกัน)

ตัวอย่างเช่นเมื่อคุณลงนามแอปพลิเคชัน Android โดยใช้อ็อพชัน Export Signed Application Package ของเครื่องมือ Eclipse Android ระบบจะขอให้คุณเลือกที่เก็บคีย์ก่อนจากนั้นขอให้เลือกนามแฝง / รายการ / คู่เดียวจากที่เก็บคีย์นั้น หลังจากระบุรหัสผ่านสำหรับทั้งที่เก็บคีย์และนามแฝงที่เลือกแล้วแอปจะได้รับการลงชื่อและคีย์สาธารณะ (ใบรับรอง) สำหรับนามแฝงนั้นจะฝังอยู่ใน APK

ตอนนี้เพื่อตอบคำถามของคุณคุณสามารถปล่อยการอัปเดตสำหรับแอปพลิเคชันที่ลงนามด้วยนามแฝง 'foo' โดยลงชื่ออัปเดตอีกครั้งด้วยนามแฝงเดียวกัน การสูญเสียที่เก็บคีย์ที่เก็บนามแฝงของคุณจะทำให้คุณไม่สามารถปล่อยแอปเวอร์ชันอัปเดตได้

อย่างไรก็ตามมีวิธีลงนามแอปด้วยนามแฝงใหม่ แต่เกี่ยวข้องกับการโคลนนามแฝงที่มีอยู่ในที่เก็บคีย์โดยใช้keytool -keyclone :

สร้างรายการที่เก็บคีย์ใหม่ซึ่งมีคีย์ส่วนตัวและห่วงโซ่ใบรับรองเดียวกันกับรายการดั้งเดิม

รายการต้นฉบับถูกระบุโดยนามแฝง (ซึ่งมีค่าเริ่มต้นเป็น "mykey" หากไม่ได้ระบุไว้) รายการ (ปลายทาง) ใหม่ถูกระบุโดย dest_alias หากไม่มีการระบุนามแฝงปลายทางที่บรรทัดคำสั่งผู้ใช้จะได้รับพร้อมต์

หากรหัสผ่านคีย์ส่วนตัวแตกต่างจากรหัสผ่านที่เก็บคีย์รายการจะถูกโคลนก็ต่อเมื่อมีการระบุรหัสผ่านที่ถูกต้อง นี่คือรหัสผ่านที่ใช้เพื่อป้องกันคีย์ส่วนตัวที่เกี่ยวข้องกับนามแฝง หากไม่มีการระบุรหัสผ่านคีย์ที่บรรทัดคำสั่งและรหัสผ่านคีย์ส่วนตัวแตกต่างจากรหัสผ่านที่เก็บคีย์ผู้ใช้จะได้รับพร้อมต์ คีย์ส่วนตัวในรายการโคลนอาจได้รับการป้องกันด้วยรหัสผ่านอื่นหากต้องการ หากไม่มีตัวเลือก -new ให้มาที่บรรทัดคำสั่งผู้ใช้จะได้รับแจ้งให้ป้อนรหัสผ่านของรายการใหม่ (และอาจเลือกที่จะปล่อยให้เป็นเช่นเดียวกับคีย์ส่วนตัวของรายการที่โคลน)

ข้อมูลมากกว่านี้:

http://download.oracle.com/javase/1.5.0/docs/tooldocs/solaris/keytool.html

http://developer.android.com/guide/publishing/app-signing.html


3
ไซต์ dev แนะนำให้ใช้ใบรับรองเดียวกันสำหรับแอปทั้งหมดของคุณ นี่หมายความว่าตราบใดที่ฉันใช้ที่เก็บคีย์เดียวกันฉันสามารถใช้นามแฝงกับรหัสผ่านใดก็ได้และจะไม่ทำให้การอัปเดตยุ่งเหยิงเนื่องจากเป็นเพียงข้อมูลอ้างอิง? ที่เก็บคีย์จริงเป็นส่วนสำคัญหรือไม่?
Roger

1
ฉันเขียนคำตอบใหม่ให้ถูกต้องมากขึ้น ในระยะสั้นคุณต้องใช้นามแฝงเดียวกันในการลงนามการอัปเดตทั้งหมดของแอปพลิเคชันของคุณ
Julio Gorgé

2
@Julio แนวทางปฏิบัติที่ดีที่สุดคือการใช้นามแฝงเดียวกันสำหรับแอปต่างๆทั้งหมดที่คุณต้องการเผยแพร่ตามที่ไซต์ dev แนะนำหรือไม่ ฉันไม่เห็นเหตุผลที่จะต้องสร้างนามแฝงแยกต่างหากสำหรับแอปทั้งหมดของคุณ
Tony Chan

@ JulioGorgé-เฮ้ฉันแค่อยากรู้ว่า R นามแฝงตัวพิมพ์เล็ก .. ??
ชื่อ Nilay

@ JulioGorgéคุณหมายถึงนามแฝงเดียวกันหรือคีย์เดียวกัน นามแฝงเป็นเพียงชื่อฉันสามารถเปลี่ยนชื่อนามแฝงได้ คุณสามารถปล่อยการอัปเดตได้ตราบเท่าที่คีย์ (คีย์สาธารณะจะเฉพาะเจาะจง) ในแอปตรงกัน
Dheeraj Bhaskar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.