有谁知道用于签名的公钥(平台、共享、媒体和发布 key )存储在最终生成的 Android 操作系统镜像中的何处?
“对发布版本进行签名”( https://source.android.com/devices/tech/ota/sign_builds ) 页面提供有关如何对 Android 操作系统镜像进行签名的信息。
标准 Android 构建使用四个 key ,所有这些 key 都位于 build/target/product/security 中:
testkey:未指定 key 的包的通用默认 key 。用于开发构建
releasekey:未指定 key 的包的通用默认 key 。用于发布版本
平台:属于核心平台的软件包的测试 key 。
共享:测试家庭/联系人进程中共享的内容的 key 。
媒体:作为媒体/下载系统一部分的包的测试 key 。
与上述私钥关联的公钥(releasekey.x509.pem、platform.x509.pem、shared.x509.pem、media.x509.pem)需要包含在 Android 镜像中。 这些是作为构建过程的一部分提供的,通常存储在用于构建 Android 操作系统镜像的主机上的 build/target/product/security 中 但是,没有提供用于签名的公钥在生成的操作系统镜像中的位置。
例如,当使用 dm-verity 时,libmincrypt 兼容格式的 RSA-2048 key 存储在/boot 分区的/verity_key 中。
最佳答案
它们不是直接存储的,而是作为签名 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 中,供恢复系统使用。
关于android - Android 在最终的 Android 操作系统镜像中将平台、共享、媒体和发布 key 存储在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56222616/