ความแตกต่างระหว่างรุ่นลายเซ็น - V1 (Jar Signature) และ V2 (Full APK Signature) ในขณะที่สร้าง APK ที่ลงชื่อใน Android Studio?


234

โปรดเลือกเวอร์ชันลายเซ็นอย่างน้อยหนึ่งรุ่นเพื่อใช้ใน Android Studio 2.3

ตอนนี้ในขณะที่สร้าง APK ที่ลงชื่อใน Android Studio มันจะแสดงสองตัวเลือก (ช่องทำเครื่องหมาย) คือ 1 V1 (Jar Signature)และ 2 V2 (Full APK Signature)เป็นรุ่นลายเซ็นต์ในขั้นตอนสุดท้ายของกระบวนการสร้าง APK ที่ลงชื่อ

ตัวเลือกรุ่นลายเซ็น **

ดังนั้นความแตกต่างระหว่างV1 (Jar Signature)และV2 (Full APK Signature)ในการอัปเดต Android Studio ใหม่คืออะไร

และฉันควรใช้ (หรือทั้งสองอย่าง) ในการลงชื่อ apk สำหรับการเปิดตัวเพลย์สโตร์

นอกจากนี้ฉันได้รับข้อผิดพลาดในการติดตั้งการแยกวิเคราะห์ล้มเหลวไม่มีใบรับรองขณะติดตั้ง APK เมื่อฉันใช้ตัวเลือกที่สอง

คำตอบ:


219

มันเป็นกลไกการเซ็นชื่อใหม่ที่นำมาใช้ใน Android 7.0 พร้อมคุณสมบัติเพิ่มเติมที่ออกแบบมาเพื่อทำให้ลายเซ็น APK มีความปลอดภัยมากขึ้น

มันไม่ได้บังคับ คุณควรตรวจสอบช่องทำเครื่องหมายทั้งสองช่องถ้าเป็นไปได้ แต่หากกลไกการลงนาม V2 ใหม่ให้ปัญหาคุณคุณสามารถละเว้นได้

ดังนั้นคุณสามารถปล่อยให้ V2 ไม่ถูกตรวจสอบหากคุณพบปัญหา แต่ควรตรวจสอบหากเป็นไปได้


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

ฉันได้อัพโหลดแอพโดยแอปพลิเคชันที่ลงชื่อแล้วโดยใช้ V1 และ V2 หลังจากนั้นฉันดาวน์โหลดแอปพลิเคชันจาก google play และเรียกใช้เวอร์ชั่นเดียวกันจาก Android Studio มันแสดงข้อความโต้ตอบของ "การติดตั้งล้มเหลวเนื่องจากอุปกรณ์มีแอปพลิเคชันที่มีแพ็คเกจเดียวกัน แต่มีลายเซ็นที่แตกต่างกัน..." ฉันทำผิดต้องอัปเดต build.gradle หรือไม่
Usman Afzal

@UsmanAfzal มันเป็นพฤติกรรมที่คาดว่าจะเกิดขึ้นตั้งแต่คุณลงนามในแอปใน playstore ด้วยการเปิดตัวและตอนนี้คุณต้องการที่จะแก้ปัญหาหรือเรียกใช้ผ่าน Android Studio ด้วยการแก้ปัญหา โปรดสังเกตว่าการเปิดตัวและการดีบักเป็นลายเซ็นที่แตกต่าง
Parama Dharmika

44

ฉันควรใช้ (หรือทั้งสองอย่าง) ในการลงชื่อ apk สำหรับการปล่อยเพลย์สโตร์หรือไม่? คำตอบคือใช่

ตามhttps://source.android.com/security/apksigning/v2.html#verification :

ใน Android 7.0 สามารถตรวจสอบ APK ได้ตาม APK Signature Scheme v2 (v2 scheme) หรือ JAR Sign (v1 scheme) แพลตฟอร์มเก่าไม่สนใจลายเซ็น v2 และตรวจสอบเฉพาะลายเซ็น v1 เท่านั้น

ผมพยายามที่จะสร้างการสร้างที่มีการตรวจสอบV2 (Full เอพีเคลายเซ็น)ตัวเลือก จากนั้นเมื่อฉันพยายามติดตั้งรุ่นบิลด์ด้านล่างอุปกรณ์7.0และฉันไม่สามารถติดตั้ง build ในอุปกรณ์ได้

หลังจากนั้นฉันพยายามสร้างโดยทำเครื่องหมายที่ช่องทำเครื่องหมายทั้งสองเวอร์ชันและสร้างรุ่นวางจำหน่าย จากนั้นสามารถติดตั้งบิลด์


24

มีการเขียนที่นี่ว่า "โดยค่าเริ่มต้น Android Studio 2.2 และปลั๊กอิน Android สำหรับ Gradle 2.2 ลงชื่อแอปของคุณโดยใช้ทั้ง APK Signature Scheme v2 และรูปแบบการลงชื่อแบบดั้งเดิมซึ่งใช้การลงนาม JAR"

เนื่องจากดูเหมือนว่าช่องทำเครื่องหมายใหม่เหล่านี้ปรากฏขึ้นพร้อมกับ Android 2.3 ฉันเข้าใจว่า Android Studio รุ่นก่อนหน้าของฉัน (อย่างน้อย 2.2) ได้ลงชื่อด้วยลายเซ็นทั้งสอง ดังนั้นเพื่อดำเนินการต่อเหมือนที่ฉันทำก่อนหน้านี้ฉันคิดว่าเป็นการดีกว่าที่จะตรวจสอบช่องทำเครื่องหมายทั้งสอง

แก้ไข 31 มีนาคม 2017:ส่งหลาย ๆ แอพที่มีทั้งลายเซ็น => ไม่มีปัญหา :)


7

ฉันคิดว่านี่เป็นคำตอบที่ดี

การตรวจสอบ APK Signature Scheme v2

  1. ค้นหาAPK Signing Blockและตรวจสอบว่า:
    1. เขตข้อมูลสองขนาดAPK Signing Blockประกอบด้วยค่าเดียวกัน
    2. ZIP Central Directoryตามด้วยการZIP End of Central Directoryบันทึกทันที
    3. ZIP End of Central Directory ไม่ได้ตามด้วยข้อมูลเพิ่มเติม
  2. ค้นหาแรกภายในAPK Signature Scheme v2 Block APK Signing Blockหาก v2 Block ถ้ามีอยู่ให้ทำตามขั้นตอนที่ 3 มิฉะนั้นถอยกลับเพื่อตรวจสอบ APK โดยใช้รูปแบบ v1
  3. สำหรับผู้ลงนามแต่ละคนใน APK Signature Scheme v2 Block :
    1. เลือก ID อัลกอริธึมลายเซ็นที่รัดกุมที่สุดที่สนับสนุนจากลายเซ็น การจัดลำดับความแข็งแกร่งขึ้นอยู่กับแต่ละเวอร์ชันการนำไปใช้งาน / แพลตฟอร์ม
    2. ตรวจสอบลายเซ็นที่สอดคล้องกันจากลายเซ็นกับข้อมูลที่ลงนามโดยใช้กุญแจสาธารณะ (ขณะนี้สามารถแยกวิเคราะห์ข้อมูลที่เซ็นชื่อได้แล้ว)
    3. ตรวจสอบว่ารายการสั่งซื้อของ ID อัลกอริทึมลายเซ็นในการย่อยและลายเซ็นเหมือนกัน (นี่คือเพื่อป้องกันการลอก / เพิ่มเติมลายเซ็น)
    4. คำนวณการแยกย่อยเนื้อหา APK โดยใช้อัลกอริทึมการแยกย่อยเช่นเดียวกับอัลกอริทึมการแยกย่อยที่ใช้โดยอัลกอริธึมลายเซ็น
    5. ตรวจสอบว่าส่วนย่อยที่คำนวณนั้นเหมือนกับส่วนย่อยที่สอดคล้องกันจากสรุปย่อย
    6. ตรวจสอบว่าSubjectPublicKeyInfoใบรับรองแรกของใบรับรองนั้นเหมือนกับกุญแจสาธารณะ
  4. การยืนยันสำเร็จหากพบผู้ลงนามอย่างน้อยหนึ่งรายและขั้นตอนที่ 3 สำเร็จสำหรับผู้ลงนามที่พบแต่ละราย

หมายเหตุ: APK ต้องไม่ถูกตรวจสอบโดยใช้รูปแบบ v1 หากเกิดความล้มเหลวในขั้นตอนที่ 3 หรือ 4

การตรวจสอบ APK ที่ลงชื่อด้วย JAR (รูปแบบ v1)

APK ที่ลงนามแล้วของ JAR เป็น JAR ที่ลงนามมาตรฐานซึ่งจะต้องมีรายการที่ระบุไว้อย่างแน่นอนMETA-INF/MANIFEST.MFและรายการทั้งหมดจะต้องลงนามโดยผู้เซ็นชุดเดียวกัน ความสมบูรณ์ของมันได้รับการตรวจสอบดังนี้:

  1. ผู้ลงนามแต่ละรายจะถูกแทนด้วยรายการMETA-INF/<signer>.SFและMETA-INF/<signer>.(RSA|DSA|EC)JAR
  2. <signer>.(RSA|DSA|EC)เป็นPKCS #7 CMS ContentInfoโครงสร้าง SignedData ที่มีการตรวจสอบลายเซ็นบน<signer>.SFไฟล์
  3. <signer>.SFไฟล์ประกอบด้วยไฟล์ทั้งหมดย่อยของและน้ำย่อยในส่วนของแต่ละMETA-INF/MANIFEST.MF META-INF/MANIFEST.MFไฟล์ย่อยทั้งหมดของไฟล์MANIFEST.MFผ่านการตรวจสอบแล้ว หากล้มเหลวระบบย่อยของแต่ละMANIFEST.MFส่วนจะถูกตรวจสอบแทน
  4. META-INF/MANIFEST.MFมีสำหรับแต่ละรายการ JAR ที่มีการป้องกันความถูกต้องส่วนที่มีชื่อที่สอดคล้องกันซึ่งมีการแยกย่อยของเนื้อหาที่ไม่ถูกบีบอัดของรายการ ไดเจสต์เหล่านี้ทั้งหมดได้รับการยืนยันแล้ว
  5. การตรวจสอบ APK ล้มเหลวหาก APK มีรายการ JAR ซึ่งไม่ได้อยู่ในรายการMANIFEST.MFและไม่ได้เป็นส่วนหนึ่งของลายเซ็น JAR ห่วงโซ่การป้องกันจึง<signer>.(RSA|DSA|EC)→การ<signer>.SF→การMANIFEST.MF→การเนื้อหาของแต่ละรายการ JAR ความสมบูรณ์ของการป้องกัน

ที่มันบอกว่า "หมายเหตุ: APK ต้องไม่ถูกตรวจสอบโดยใช้รูปแบบ v1 หากเกิดความล้มเหลวในขั้นตอนที่ 3 หรือ 4" ขั้นตอนที่ 3 หรือ 4 ใน Scheme 2 หรือ Scheme 1? หากความล้มเหลวเกิดขึ้นในขั้นตอนที่ 3 หรือ 4 ใน v2 และบอกว่ามันไม่สามารถตรวจสอบได้โดยใช้รูปแบบ v1 แล้วมันจะไม่ได้รับการตรวจสอบใน v1 หรือ v2 ว่าจะตรวจสอบได้อย่างไร?
isJulian00

7

ตามลิงค์นี้: ช่วยลายเซ็น

ข้อเสนอ APK Signature Scheme v2:

  1. เวลาติดตั้งแอปเร็วขึ้น
  2. การป้องกันเพิ่มเติมจากการเปลี่ยนแปลงไฟล์ APK โดยไม่ได้รับอนุญาต

Android 7.0 แนะนำ APK Signature Scheme v2 ซึ่งเป็นรูปแบบการลงนามในแอพใหม่ที่ให้เวลาในการติดตั้งแอพที่เร็วขึ้นและป้องกันการเปลี่ยนแปลงไฟล์ APK โดยไม่ได้รับอนุญาต ตามค่าเริ่มต้นแล้ว Android Studio 2.2 และปลั๊กอิน Android สำหรับ Gradle 2.2 ลงชื่อแอปของคุณโดยใช้ทั้ง APK Signature Scheme v2 และรูปแบบการลงชื่อแบบดั้งเดิมซึ่งใช้การลงนาม JAR

มันเป็นเรื่องที่แนะนำให้ใช้ลายเซ็นเอพีเคโครงการv2แต่ไม่ได้รับคำสั่ง

แม้ว่าเราจะแนะนำให้ใช้ APK Signature Scheme v2 กับแอปของคุณ แต่รูปแบบใหม่นี้ไม่บังคับ หากแอปของคุณสร้างไม่ถูกต้องเมื่อใช้ APK Signature Scheme v2 คุณสามารถปิดใช้งานรูปแบบใหม่ได้


สวัสดี @Shishish เราสามารถสร้าง v2 จาก eclipse ได้หรือไม่
Arjun T Raj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.