android - 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 分区中。
解决方案
它们不是直接存储的,而是作为已签名 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中,供恢复系统使用。
推荐阅读
- reactjs - 托管在 apache 上时 express-session 不设置 cookie
- javafx - 类 Circle javafx.scene.shape.* 中的构造函数 Circle 存在问题;
- macos - 如何在 MacOS 上使用 Docker 桌面监听主机本地主机
- sql - PostgreSQL:在连接表上创建唯一约束(多表约束)
- outlook - Opencart Outlook SMTP
- python - 按原样对数据帧行进行排序,没有索引问题
- c# - Nullable Annotation 到底是什么意思?
- python - 如何在 discord.py 中使用 Bot top role position 命令?
- python - 如何在 Python 中恢复中断的 FTP 上传
- python - 使用 RStudio 时导入 python 自定义模块