Android官方文檔
https://source.android.google.cn/devices/tech/ota/sign_builds?hl=zh-cn
https://android.googlesource.com/platform/build/+/refs/heads/master/target/product/security/README
前言
Android 作業系統映像在三個地方使用加密簽名:
- 映像中的所有 .apk 檔案都必須經過簽名。Android 軟體包管理器通過下列兩種方式使用 .apk 簽名:
- 更換應用時,必須使用與舊應用相同的密鑰對其簽名,才能存取舊應用的資料。無論是通過覆寫 .apk 來更新使用者應用,還是使用安裝在 /data 下的新版本應用來覆寫系統應用,這一點都适用。
- 如果兩個或多個應用想要共享同一個使用者 ID(友善共享資料等),則必須使用相同的密鑰對它們進行簽名。
- 必須使用符合系統預期的密鑰對 OTA 更新包進行簽名,否則在安裝過程中 OTA 更新包将被拒絕。
- 必須使用符合系統預期的密鑰對img進行簽名,否則flash img後verity boot将失敗而不能正常啟動
生成key
生成releasekey platform shared media networkstack
subject='/C=CN/ST=Shanghai/L=Shanghai/O=Android/OU=Android/CN=Android/[email protected]'
for x in releasekey platform shared media networkstack; do \
./development/tools/make_key ~/.android-certs/$x "$subject"; \
done
生成 verity_key
make generate_verity_key
development/tools/make_key verity '/C=CN/ST=Shanghai/L=Shanghai/O=Android/OU=Android/CN=Android/[email protected]'
out/host/linux-x86/bin/generate_verity_key -convert verity.x509.pem verity_key
拷貝key
将以上兩部份生成的key,拷貝到build/target/product/security,替換掉原來的key
生成key的參數解釋
- C — Country Name (2 letter code)
- ST — State or Province Name (full name)
- L — Locality Name (eg, city)
- O — Organization Name (eg, company)
- OU — Organizational Unit Name (eg, section)
- CN — Common Name (eg, your name or your server’s hostname)
- emailAddress — Contact email address