在构建基于 AOSP 源码的自定义镜像时,配置系统证书和签名是一个关键步骤。这一过程确保您的自定义系统具备必要的安全防护,保护系统免受未授权访问和篡改,同时保证了系统组件和更新的完整性。通过使用签名机制,您可以验证所有预装程序的真实性,并确保它们在设备上的安全运行。
本文档提供了一套针对自定义镜像配置系统证书和签名的逐步指导。你可以按照以下步骤修改系统证书和签名。
已参照 AOSP 代码下载获取镜像源码。
系统中已安装 OpenSSL。
参照以下脚本,完成自定义证书生成。
#!/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 各字段含义如下:
| 字段 | 含义 | 说明 |
|---|---|---|
| C | Country Name | 国家名称,两位字母代码 |
| ST | State or Province Name | 州或省名称,全名 |
| L | Locality Name | 地点名称,如城市名 |
| O | Organization Name | 组织名称 |
| OU | Organizational Unit Name | 组织的部门名称 |
| CN | Common Name | 作者名称或服务器名称 |
| emailAddress | emailAddress | 邮箱地址 |
将生成的证书复制到 AOSP 源代码中指定的目录,以 device/bytedance/gemini/security/releasekey 为例。
修改 device/bytedance/gemini/gemini.mk 文件,添加以下内容:
PRODUCT_DEFAULT_DEV_CERTIFICATE := device/bytedance/gemini/security/releasekey
修改证书文件后,需要清理构建环境,或删除 out 目录,并重新编译:
rm -rf out
你可以选择通过 Android Studio 或 java 命令的方式,对 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 命令完成对应用的系统签名。其中$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