android - Android 在最终的 Android 操作系统镜像中将平台、共享、媒体和发布 key 存储在哪里

标签 android code-signing

有谁知道用于签名的公钥(平台、共享、媒体和发布 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/

相关文章:

android - 按下按钮时如何在 Activity 中绘制垂直线?

android - 9patch PNG有什么用?

xcode - "Profile"是一个有效的身份。但是,您没有关联的包标识。可以导入来自不同 Mac 的开发人员配置文件

code-signing - signtool吊销问题?

ios - 代码签名错误 : No unexpired provisioning profiles found that contain any of the keychain's signing certificates

android - 如何在 Gitlab CI for android 中管理签名 keystore

Android 多嵌套 DialogFragment

android - 如何在Kotlin Android中的MaterialButton中获取背景色

android - 为什么使用 Android 附近共享时通过蓝牙传输文件?

android - 多个开发者的谷歌登录配置文件