เซ็นบิลด์เพื่อเผยแพร่

อิมเมจระบบปฏิบัติการ Android ใช้ลายเซ็นเข้ารหัสใน 2 ที่ต่อไปนี้

  1. ไฟล์ .apk แต่ละไฟล์ภายในอิมเมจต้องได้รับการลงนาม Package Manager ของ Android ใช้ลายเซ็น .apk ใน 2 วิธี ดังนี้
    • เมื่อมีการแทนที่แอปพลิเคชัน แอปพลิเคชันนั้นต้องลงนามด้วยคีย์เดียวกับ แอปพลิเคชันเดิมจึงจะเข้าถึงข้อมูลของแอปพลิเคชันเดิมได้ ซึ่งเป็นจริงทั้งสำหรับการอัปเดตแอปของผู้ใช้โดยการเขียนทับ .apk และสำหรับการเขียนทับแอปของระบบด้วยเวอร์ชันใหม่กว่าที่ติดตั้งภายใต้ /data
    • หากแอปพลิเคชัน 2 รายการขึ้นไปต้องการแชร์รหัสผู้ใช้ (เพื่อให้แชร์ข้อมูล ฯลฯ ได้) แอปพลิเคชันเหล่านั้นต้องได้รับการลงนามด้วยคีย์เดียวกัน
  2. แพ็กเกจอัปเดต OTA ต้องลงนามด้วยคีย์ใดคีย์หนึ่งที่ระบบคาดหวังไว้ ไม่เช่นนั้นกระบวนการติดตั้งจะปฏิเสธแพ็กเกจ

คีย์การเผยแพร่

ทรีของ Android มี test-keys อยู่ใน build/target/product/security การสร้างอิมเมจระบบปฏิบัติการ Android โดยใช้ make จะลงนามในไฟล์ .apk ทั้งหมดโดยใช้ คีย์ทดสอบ เนื่องจากคีย์ทดสอบเป็นที่รู้จักกันในวงกว้าง ใครๆ ก็สามารถลงนามในไฟล์ .apk ของตนเองด้วยคีย์เดียวกันได้ ซึ่งอาจทำให้บุคคลเหล่านั้นสามารถแทนที่หรือลักลอบใช้แอปของระบบที่สร้างไว้ในอิมเมจของระบบปฏิบัติการ ด้วยเหตุนี้ การลงนามในอิมเมจระบบปฏิบัติการ Android ที่เผยแพร่หรือติดตั้งใช้งานต่อสาธารณะด้วยชุดคีย์สำหรับรุ่นพิเศษที่คุณเท่านั้นที่มีสิทธิ์เข้าถึงจึงเป็นสิ่งสำคัญ

หากต้องการสร้างชุดคีย์รุ่นที่ไม่ซ้ำกันของคุณเอง ให้เรียกใช้คำสั่งต่อไปนี้จากรูทของโครงสร้าง Android

subject='/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com'
mkdir ~/.android-certs
for x in releasekey platform shared media networkstack; do \
    ./development/tools/make_key ~/.android-certs/$x "$subject"; \
  done

$subject ควรเปลี่ยนให้สอดคล้องกับข้อมูลขององค์กร คุณใช้ไดเรกทอรีใดก็ได้ แต่โปรดเลือก ตำแหน่งที่มีการสำรองข้อมูลและปลอดภัย ผู้ให้บริการบางรายเลือกที่จะเข้ารหัส คีย์ส่วนตัวด้วยพาสเฟรสที่รัดกุมและจัดเก็บคีย์ที่เข้ารหัส ไว้ในการควบคุมแหล่งที่มา ส่วนผู้ให้บริการรายอื่นๆ จะจัดเก็บคีย์การเผยแพร่ไว้ที่อื่น เช่น ในคอมพิวเตอร์ที่แยกจากเครือข่าย

หากต้องการสร้างภาพผลงาน ให้ใช้

make dist
sign_target_files_apks \
-o \    # explained in the next section
--default_key_mappings ~/.android-certs out/dist/*-target_files-*.zip \
signed-target_files.zip

สคริปต์ sign_target_files_apks จะรับไฟล์เป้าหมาย .zipเป็นอินพุตและสร้างไฟล์เป้าหมายใหม่ .zip ซึ่ง ไฟล์ .apk ทั้งหมดได้รับการลงนามด้วยคีย์ใหม่ คุณจะดูรูปภาพที่เพิ่งลงนามได้ในส่วน IMAGES/ in signed-target_files.zip

ลงนามในแพ็กเกจ OTA

คุณแปลงไฟล์ ZIP ของ target-files ที่ลงชื่อแล้วเป็นไฟล์ ZIP ของการอัปเดต OTA ที่ลงชื่อแล้วได้ โดยใช้ขั้นตอนต่อไปนี้
ota_from_target_files \
-k  (--package_key) 
signed-target_files.zip \
signed-ota_update.zip

ลายเซ็นและการโหลดแอปจากแหล่งที่ไม่รู้จัก

การโหลดแอปจากแหล่งที่ไม่รู้จักไม่ได้ข้ามกลไกการตรวจสอบลายเซ็นแพ็กเกจปกติของ Recovery ก่อนที่จะติดตั้งแพ็กเกจ Recovery จะตรวจสอบว่า แพ็กเกจลงนามด้วยคีย์ส่วนตัวรายการใดรายการหนึ่งที่ตรงกับคีย์สาธารณะที่จัดเก็บไว้ใน พาร์ติชัน Recovery เช่นเดียวกับแพ็กเกจที่ส่งผ่านทางอากาศ

โดยปกติแล้ว ระบบหลักจะตรวจสอบแพ็กเกจการอัปเดตที่ได้รับ 2 ครั้ง ครั้งแรกโดยระบบหลักโดยใช้ RecoverySystem.verifyPackage() เมธอดใน Android API และอีกครั้งโดย การกู้คืน API ของ RecoverySystem จะตรวจสอบลายเซ็นกับคีย์สาธารณะ ที่จัดเก็บไว้ในระบบหลักในไฟล์ /system/etc/security/otacerts.zip (โดยค่าเริ่มต้น) การกู้คืนจะตรวจสอบลายเซ็นกับคีย์สาธารณะที่จัดเก็บไว้ ใน RAM ดิสก์ของพาร์ติชันการกู้คืนในไฟล์ /res/keys

โดยค่าเริ่มต้น ไฟล์เป้าหมาย .zip ที่สร้างขึ้นโดยบิลด์จะตั้งค่าใบรับรอง OTA ให้ตรงกับคีย์ทดสอบ ในอิมเมจที่เผยแพร่แล้ว คุณต้องใช้ ใบรับรองอื่นเพื่อให้อุปกรณ์ยืนยันความถูกต้องของ แพ็กเกจการอัปเดตได้ การส่งแฟล็ก -o ไปยัง sign_target_files_apks ดังที่แสดงในส่วนก่อนหน้าจะแทนที่ ใบรับรองคีย์ทดสอบด้วยใบรับรองคีย์เผยแพร่จากไดเรกทอรี certs

โดยปกติแล้ว อิมเมจระบบและอิมเมจการกู้คืนจะจัดเก็บชุดคีย์สาธารณะ OTA เดียวกัน การเพิ่มคีย์ลงในชุดคีย์การกู้คืนเท่านั้นจะช่วยให้คุณลงนามในแพ็กเกจที่ติดตั้งได้ผ่านการโหลดด้านข้างเท่านั้น (สมมติว่ากลไกการดาวน์โหลดการอัปเดตของระบบหลักทำการยืนยันกับ otacerts.zip อย่างถูกต้อง) คุณระบุคีย์เพิ่มเติมที่จะรวมไว้ในการกู้คืนเท่านั้นได้โดยการตั้งค่าตัวแปร PRODUCT_EXTRA_RECOVERY_KEYS ในคำจำกัดความผลิตภัณฑ์

vendor/yoyodyne/tardis/products/tardis.mk
 [...]

PRODUCT_EXTRA_RECOVERY_KEYS := vendor/yoyodyne/security/tardis/sideload

ซึ่งรวมถึงคีย์สาธารณะ vendor/yoyodyne/security/tardis/sideload.x509.pem ในไฟล์คีย์การกู้คืน เพื่อให้ติดตั้งแพ็กเกจที่ลงนาม ด้วยคีย์ดังกล่าวได้ แต่เราไม่ได้รวมคีย์เพิ่มเติมไว้ใน otacerts.zip ดังนั้น ระบบที่ยืนยันแพ็กเกจที่ดาวน์โหลดอย่างถูกต้องจะไม่เรียกใช้การกู้คืนสำหรับ แพ็กเกจที่ลงนามด้วยคีย์นี้

ใบรับรองและคีย์ส่วนตัว

คีย์แต่ละรายการจะมาใน 2 ไฟล์ ได้แก่ ใบรับรองซึ่งมีนามสกุล .x509.pem และคีย์ส่วนตัวซึ่งมีนามสกุล .pk8 คีย์ส่วนตัวควรเก็บเป็นความลับและจำเป็นต้องใช้ในการลงชื่อแพ็กเกจ คีย์ อาจได้รับการป้องกันด้วยรหัสผ่าน ในทางตรงกันข้าม ใบรับรองมีเพียงครึ่งหนึ่งของคีย์ที่เป็นสาธารณะเท่านั้น จึงสามารถเผยแพร่ได้อย่างกว้างขวาง โดยใช้เพื่อยืนยันว่าแพ็กเกจได้รับการลงนามด้วย คีย์ส่วนตัวที่เกี่ยวข้อง

การสร้าง Android มาตรฐานใช้คีย์ 5 รายการ ซึ่งทั้งหมดอยู่ใน build/target/product/security

testkey
คีย์เริ่มต้นทั่วไปสำหรับแพ็กเกจที่ไม่ได้ระบุคีย์ไว้
แพลตฟอร์ม
ทดสอบคีย์สำหรับแพ็กเกจที่เป็นส่วนหนึ่งของแพลตฟอร์มหลัก
แชร์
คีย์ทดสอบสำหรับสิ่งที่แชร์ในกระบวนการบ้าน/รายชื่อติดต่อ
สื่อ
คีย์ทดสอบสำหรับแพ็กเกจที่เป็นส่วนหนึ่งของระบบสื่อ/การดาวน์โหลด
networkstack
คีย์ทดสอบสำหรับแพ็กเกจที่เป็นส่วนหนึ่งของระบบเครือข่าย คีย์ networkstack ใช้เพื่อลงนามไบนารีที่ออกแบบเป็น Mainline Modules หากสร้างการอัปเดตโมดูลแยกต่างหากและผสานรวมเป็น Prebuilt ในอิมเมจอุปกรณ์ คุณอาจไม่จำเป็นต้องสร้างคีย์ networkstack ใน แหล่งที่มาของ Android

แพ็กเกจแต่ละรายการจะระบุคีย์ใดคีย์หนึ่งเหล่านี้โดยการตั้งค่า LOCAL_CERTIFICATE ในไฟล์ Android.mk (ระบบจะใช้ testkey หากไม่ได้ตั้งค่าตัวแปรนี้) นอกจากนี้ คุณยังระบุคีย์อื่นที่แตกต่างกันโดยสิ้นเชิงตามเส้นทางได้ด้วย เช่น

device/yoyodyne/apps/SpecialApp/Android.mk
 [...]

LOCAL_CERTIFICATE := device/yoyodyne/security/special

ตอนนี้บิลด์ใช้คีย์ device/yoyodyne/security/special.{x509.pem,pk8} เพื่อลงนาม SpecialApp.apk บิลด์ใช้ได้เฉพาะคีย์ส่วนตัวที่ไม่ได้ ป้องกันด้วยรหัสผ่าน

ตัวเลือกการลงนามขั้นสูง

การแทนที่คีย์การลงนาม APK

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

ใช้แฟล็ก --key_mapping และ --default_key_mappings เพื่อระบุการแทนที่คีย์ตามชื่อคีย์

  • แฟล็ก --key_mapping src_key=dest_key ระบุการแทนที่แป้นทีละแป้น
  • แฟล็ก --default_key_mappings dir ระบุไดเรกทอรีที่มีคีย์ 5 รายการเพื่อแทนที่คีย์ทั้งหมดใน build/target/product/security ซึ่งเทียบเท่ากับการใช้ --key_mapping 5 ครั้งเพื่อระบุการแมป
build/target/product/security/testkey      = dir/releasekey
build/target/product/security/platform     = dir/platform
build/target/product/security/shared       = dir/shared
build/target/product/security/media        = dir/media
build/target/product/security/networkstack = dir/networkstack

ใช้ --extra_apks apk_name1,apk_name2,...=key แฟล็ก เพื่อระบุการแทนที่คีย์การลงนามตามชื่อ APK หากเว้นว่างไว้ สคริปต์จะถือว่า APK ที่ระบุ เป็น APK ที่ลงนามไว้ล่วงหน้าkey

สำหรับผลิตภัณฑ์สมมติอย่างทาร์ดิส คุณต้องมีคีย์ที่ป้องกันด้วยรหัสผ่าน 6 คีย์ ได้แก่ 5 คีย์เพื่อแทนที่ 5 คีย์ใน build/target/product/security และอีก 1 คีย์ เพื่อแทนที่คีย์เพิ่มเติม device/yoyodyne/security/special ที่ SpecialApp กำหนดในตัวอย่างด้านบน หากคีย์อยู่ในไฟล์ต่อไปนี้

vendor/yoyodyne/security/tardis/releasekey.x509.pem
vendor/yoyodyne/security/tardis/releasekey.pk8
vendor/yoyodyne/security/tardis/platform.x509.pem
vendor/yoyodyne/security/tardis/platform.pk8
vendor/yoyodyne/security/tardis/shared.x509.pem
vendor/yoyodyne/security/tardis/shared.pk8
vendor/yoyodyne/security/tardis/media.x509.pem
vendor/yoyodyne/security/tardis/media.pk8
vendor/yoyodyne/security/tardis/networkstack.x509.pem
vendor/yoyodyne/security/tardis/networkstack.pk8
vendor/yoyodyne/security/special.x509.pem
vendor/yoyodyne/security/special.pk8           # NOT password protected
vendor/yoyodyne/security/special-release.x509.pem
vendor/yoyodyne/security/special-release.pk8   # password protected

จากนั้นคุณจะลงนามในแอปทั้งหมดได้ดังนี้

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings vendor/yoyodyne/security/tardis \
    --key_mapping vendor/yoyodyne/security/special=vendor/yoyodyne/security/special-release \
    --extra_apks PresignedApp= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

ซึ่งจะแสดงสิ่งต่อไปนี้

Enter password for vendor/yoyodyne/security/special-release key>
Enter password for vendor/yoyodyne/security/tardis/networkstack key>
Enter password for vendor/yoyodyne/security/tardis/media key>
Enter password for vendor/yoyodyne/security/tardis/platform key>
Enter password for vendor/yoyodyne/security/tardis/releasekey key>
Enter password for vendor/yoyodyne/security/tardis/shared key>
    signing: Phone.apk (vendor/yoyodyne/security/tardis/platform)
    signing: Camera.apk (vendor/yoyodyne/security/tardis/media)
    signing: NetworkStack.apk (vendor/yoyodyne/security/tardis/networkstack)
    signing: Special.apk (vendor/yoyodyne/security/special-release)
    signing: Email.apk (vendor/yoyodyne/security/tardis/releasekey)
        [...]
    signing: ContactsProvider.apk (vendor/yoyodyne/security/tardis/shared)
    signing: Launcher.apk (vendor/yoyodyne/security/tardis/shared)
NOT signing: PresignedApp.apk
        (skipped due to special cert string)
rewriting SYSTEM/build.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
    signing: framework-res.apk (vendor/yoyodyne/security/tardis/platform)
rewriting RECOVERY/RAMDISK/default.prop:
  replace:  ro.build.description=tardis-user Eclair ERC91 15449 test-keys
     with:  ro.build.description=tardis-user Eclair ERC91 15449 release-keys
  replace: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/test-keys
     with: ro.build.fingerprint=generic/tardis/tardis/tardis:Eclair/ERC91/15449:user/release-keys
using:
    vendor/yoyodyne/security/tardis/releasekey.x509.pem
for OTA package verification
done.

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

การแทนที่คีย์การลงนาม APEX

Android 10 เปิดตัวรูปแบบไฟล์ APEX สำหรับการติดตั้ง โมดูลระบบระดับล่าง ดังที่อธิบายไว้ในการลงนาม APEX ไฟล์ APEX แต่ละไฟล์จะ ลงนามด้วยคีย์ 2 รายการ ได้แก่ คีย์สำหรับอิมเมจระบบไฟล์ขนาดเล็กภายใน APEX และ คีย์อีกรายการสำหรับ APEX ทั้งหมด

เมื่อลงนามสำหรับการเผยแพร่ ระบบจะแทนที่คีย์การลงนาม 2 รายการสำหรับไฟล์ APEX ด้วยคีย์การเผยแพร่ คีย์เพย์โหลดของระบบไฟล์จะระบุด้วยแฟล็ก --extra_apex_payload และคีย์การลงนามไฟล์ APEX ทั้งหมดจะระบุด้วยแฟล็ก --extra_apks

สำหรับผลิตภัณฑ์ Tardis ให้ถือว่าคุณมีการกำหนดค่าคีย์ต่อไปนี้ สำหรับไฟล์ com.android.conscrypt.apex, com.android.media.apex และ com.android.runtime.release.apex APEX

name="com.android.conscrypt.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.media.apex" public_key="PRESIGNED" private_key="PRESIGNED" container_certificate="PRESIGNED" container_private_key="PRESIGNED"
name="com.android.runtime.release.apex" public_key="vendor/yoyodyne/security/testkeys/com.android.runtime.avbpubkey" private_key="vendor/yoyodyne/security/testkeys/com.android.runtime.pem" container_certificate="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.x509.pem" container_private_key="vendor/yoyodyne/security/testkeys/com.google.android.runtime.release_container.pk8"

และคุณมีไฟล์ต่อไปนี้ที่มีคีย์รุ่น

vendor/yoyodyne/security/runtime_apex_container.x509.pem
vendor/yoyodyne/security/runtime_apex_container.pk8
vendor/yoyodyne/security/runtime_apex_payload.pem

คำสั่งต่อไปนี้จะลบล้างคีย์การลงนามสำหรับ com.android.runtime.release.apex และ com.android.tzdata.apex ในระหว่างการลงนามรุ่น โดยเฉพาะอย่างยิ่ง com.android.runtime.release.apex จะได้รับการลงนามด้วย คีย์รุ่นที่ระบุ (runtime_apex_container สำหรับไฟล์ APEX และ runtime_apex_payload สำหรับเพย์โหลดรูปภาพไฟล์) com.android.tzdata.apex จะถือว่ามีการลงนามล่วงหน้า ส่วนไฟล์ APEX อื่นๆ ทั้งหมดจะได้รับการจัดการโดยการกำหนดค่าเริ่มต้นตามที่ระบุไว้ในไฟล์เป้าหมาย

./build/make/tools/releasetools/sign_target_files_apks \
    --default_key_mappings   vendor/yoyodyne/security/tardis \
    --extra_apks             com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_container \
    --extra_apex_payload_key com.android.runtime.release.apex=vendor/yoyodyne/security/runtime_apex_payload.pem \
    --extra_apks             com.android.media.apex= \
    --extra_apex_payload_key com.android.media.apex= \
    -o tardis-target_files.zip \
    signed-tardis-target_files.zip

การเรียกใช้คำสั่งข้างต้นจะให้บันทึกต่อไปนี้

        [...]
    signing: com.android.runtime.release.apex                  container (vendor/yoyodyne/security/runtime_apex_container)
           : com.android.runtime.release.apex                  payload   (vendor/yoyodyne/security/runtime_apex_payload.pem)
NOT signing: com.android.conscrypt.apex
        (skipped due to special cert string)
NOT signing: com.android.media.apex
        (skipped due to special cert string)
        [...]

ตัวเลือกอื่นๆ

สคริปต์การลงนาม sign_target_files_apks จะเขียนคำอธิบาย การสร้างและลายนิ้วมือใหม่ในไฟล์พร็อพเพอร์ตี้การสร้างเพื่อแสดงว่า การสร้างเป็นเวอร์ชันที่ลงนามแล้ว โดยค่าสถานะ --tag_changes จะควบคุมการแก้ไข ลายนิ้วมือ เรียกใช้สคริปต์ด้วย -h เพื่อดู เอกสารประกอบเกี่ยวกับแฟล็กทั้งหมด

สร้างคีย์ด้วยตนเอง

Android ใช้คีย์ RSA 2048 บิตที่มีเลขชี้กำลังสาธารณะเป็น 3 คุณสร้างคู่ใบรับรอง/คีย์ส่วนตัวได้โดยใช้เครื่องมือ openssl จาก openssl.org ดังนี้

# generate RSA key
openssl genrsa -3 -out temp.pem 2048
Generating RSA private key, 2048 bit long modulus
....+++
.....................+++
e is 3 (0x3)

# create a certificate with the public part of the key
openssl req -new -x509 -key temp.pem -out releasekey.x509.pem -days 10000 -subj '/C=US/ST=California/L=San Narciso/O=Yoyodyne, Inc./OU=Yoyodyne Mobility/CN=Yoyodyne/emailAddress=yoyodyne@example.com'

# create a PKCS#8-formatted version of the private key
openssl pkcs8 -in temp.pem -topk8 -outform DER -out releasekey.pk8 -nocrypt

# securely delete the temp.pem file
shred --remove temp.pem

คำสั่ง openssl pkcs8 ที่ระบุไว้ข้างต้นจะสร้างไฟล์ .pk8 ที่ไม่มี รหัสผ่าน ซึ่งเหมาะสำหรับใช้กับระบบบิลด์ หากต้องการสร้าง .pk8 ที่ปลอดภัย ด้วยรหัสผ่าน (ซึ่งคุณควรทำสำหรับคีย์รุ่นที่เผยแพร่จริงทั้งหมด) ให้แทนที่อาร์กิวเมนต์ -nocrypt ด้วย -passout stdin จากนั้น openssl จะเข้ารหัสคีย์ส่วนตัวด้วยรหัสผ่านที่อ่านจากอินพุตมาตรฐาน ไม่มีการพิมพ์พรอมต์ ดังนั้นหาก stdin เป็นเทอร์มินัล โปรแกรมจะดูเหมือนค้าง ในขณะที่จริงๆ แล้วโปรแกรมเพียงแค่รอให้คุณป้อนรหัสผ่าน คุณสามารถใช้ค่าอื่นๆ สำหรับอาร์กิวเมนต์ -passout เพื่ออ่านรหัสผ่านจากตำแหน่งอื่นๆ ได้ ดูรายละเอียดได้ใน เอกสารประกอบของ OpenSSL

ไฟล์กลาง temp.pem มีคีย์ส่วนตัวที่ไม่มีการป้องกันด้วยรหัสผ่านใดๆ ดังนั้นโปรดพิจารณาอย่างรอบคอบเมื่อสร้างคีย์รุ่น โดยเฉพาะอย่างยิ่ง ยูทิลิตี GNUshred อาจไม่มีประสิทธิภาพในเครือข่ายหรือระบบไฟล์ที่บันทึกการเปลี่ยนแปลง คุณสามารถใช้ไดเรกทอรีการทำงานที่อยู่ใน RAM Disk (เช่น พาร์ติชัน tmpfs) เมื่อสร้างคีย์เพื่อให้มั่นใจว่า จะไม่เปิดเผยคีย์กลางโดยไม่ตั้งใจ

สร้างไฟล์รูปภาพ

เมื่อมี signed-target_files.zip คุณจะต้อง สร้างรูปภาพเพื่อนำไปใส่ในอุปกรณ์ หากต้องการสร้างอิมเมจที่ลงนามจากไฟล์เป้าหมาย ให้เรียกใช้ คำสั่งต่อไปนี้จากรูทของ โครงสร้าง Android

img_from_target_files signed-target_files.zip signed-img.zip
ไฟล์ที่ได้ signed-img.zip จะมีไฟล์ .img ทั้งหมด หากต้องการโหลดรูปภาพลงในอุปกรณ์ ให้ใช้ fastboot ดังนี้
fastboot update signed-img.zip