首页 > 解决方案 > Android 在最终的 Android OS 映像中将平台、共享、媒体和发布密钥存储在哪里

问题描述

有谁知道用于签名的公钥(平台、共享、媒体和发布密钥)存储在最终生成的 Android OS 映像中的位置?

'Signing Builds for Release' ( https://source.android.com/devices/tech/ota/sign_builds ) 页面提供了有关如何签署 Android OS 映像的信息。

标准的 Android 构建使用四个密钥,它们都位于 build/target/product/security 中:

testkey:未指定密钥的包的通用默认密钥。用于开发构建

releasekey:未指定密钥的包的通用默认密钥。用于发布版本

平台:作为核心平台一部分的包的测试密钥。

shared:测试在 home/contacts 进程中共享的东西的密钥。

媒体:作为媒体/下载系统一部分的包的测试密钥。

与上述私钥关联的公钥(releasekey.x509.pem、platform.x509.pem、shared.x509.pem、media.x509.pem)需要作为 Android 镜像的一部分。这些作为构建过程的一部分提供,通常存储在用于构建 Android OS 映像的主机上的 build/target/product/security 但是,未提供的是用于签名的公钥在生成的 OS 中的位置图片。

例如,当使用 dm-verity 时,libmincrypt 兼容格式的 RSA-2048 密钥存储在 /verity_key 的 /boot 分区中。

标签: androidcode-signing

解决方案


它们不是直接存储的,而是作为已签名 apk 的一部分存储的,这些 apk 已经是系统映像的一部分。PackageManager 解析它们并将它们存储在 /data/system/packages.xml中。

在该 xml 中,您会看到如下标签:公钥标识符

其中包含所有 apk 的公钥。如果您已经有一些也在设备上的 apk,您可以解压缩它。

// 从 apk 中获取公钥

openssl pkcs7 -inform DER -print_certs -out cert.pem -in CERT.RSA
openssl x509 -in cert.pem -pubkey -noout

这将与 packages.xml 中存储的公钥之一相同

除此之外,在/etc/security/mac_permissions.xml的设备中,还有一些签名可以告诉具有特定签名的应用程序到特定的 SE 上下文。您可以在http://androidxref.com/7.1.1_r6/xref/system/sepolicy/README阅读其详细信息

OTA 证书存储在/etc/security/otacerts.zip中,供恢复系统使用。


推荐阅读