You need to enable JavaScript to run this app.
导航
修改定制系统证书及签名
最近更新时间:2024.09.24 15:58:35首次发布时间:2024.08.14 14:14:29
复制全文
我的收藏
有用
有用
无用
无用

在构建基于 AOSP 源码的自定义镜像时,配置系统证书和签名是一个关键步骤。这一过程确保您的自定义系统具备必要的安全防护,保护系统免受未授权访问和篡改,同时保证了系统组件和更新的完整性。通过使用签名机制,您可以验证所有预装程序的真实性,并确保它们在设备上的安全运行。
本文档提供了一套针对自定义镜像配置系统证书和签名的逐步指导。你可以按照以下步骤修改系统证书和签名。

前提条件

第 1 步 生成自定义证书

参照以下脚本,完成自定义证书生成。

#!/bin/bash
subject='/C=CN/ST=Example/L=Example/O=Example Technology Co Ltd./OU=OS/CN=Your Hame/emailAddress=test@example.com'

# AOSP代码目录
aosp=/home/root/workspace/aosp10
# 创建证书存储目录
mkdir certs
# 分别创建releasekey, testkey, platform media shared 证书
for x in releasekey testkey platform media shared networkstack; do \
    $aosp/development/tools/make_key certs/$x "$subject" rsa; \
done

其中,subject 各字段含义如下:

字段含义说明
CCountry Name国家名称,两位字母代码
STState or Province Name州或省名称,全名
LLocality Name地点名称,如城市名
OOrganization Name组织名称
OUOrganizational Unit Name组织的部门名称
CNCommon Name作者名称或服务器名称
emailAddressemailAddress邮箱地址

第 2 步 替换原证书

将生成的证书复制到 AOSP 源代码中指定的目录,以 device/bytedance/gemini/security/releasekey 为例。

第 3 步 指定证书路径

修改 device/bytedance/gemini/gemini.mk 文件,添加以下内容:

PRODUCT_DEFAULT_DEV_CERTIFICATE := device/bytedance/gemini/security/releasekey

第 4 步 编译系统

修改证书文件后,需要清理构建环境,或删除 out 目录,并重新编译:

rm -rf out

第 5 步 对已有 app 镜像系统签名

你可以选择通过 Android Studio 或 java 命令的方式,对 app 镜像进行系统签名。

通过 Android Studio 对 app 进行系统签名

参照以下步骤,生成一个可以在 Android Studio 中使用的.jks密钥库文件,用于对 Android 应用进行签名。其中,youralias是您为密钥指定的别名,而test123是您为密钥库设置的密码。在实际使用中,您需要替换这些占位符为实际的值。

# platform.pk8转platform.pem
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.pem -nocrypt               

# platform.x509.pem转platform.pk12, keyAlias 为别名
openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.pk12 -name youralias

# platform.pk12转platform.jks
keytool -importkeystore -deststorepass test123 -deststoretype pkcs12 -destkeystore platform.jks -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass test123 -alias youralias

使用 Java 命令行工具对应用程序 APK 进行系统签名

执行如下 Java 命令完成对应用的系统签名。其中$aosp为 Android 源码,-Djava.library.path注意双引号,app-unsigned.apk为待签名应用,app-signed.apk 为签名完成的文件,在实际使用中,您需要替换这些占位符为实际的值。

# signapk.jar: out/host/linux-x86/framework/signapk.jar
java -Djava.library.path="$aosp/out/host/linux-x86/lib64" -jar $aosp/out/host/linux-x86/framework/signapk.jar $aosp/make/target/product/security/platform.x509.pem $aosp/make/target/product/security/platform.pk8 app-unsigned.apk app-signed.apk