Android 系统生成 releasekey

1、android 系统签名文件目录在

build/target/product/security

其中包含的签名文件有,media.pk8,media.x509.pem;platform.pk8,platform.x509.pem;releasekey.pk8,releasekey.x509.pem;shared.pk8,shared.x509.pem;testkey.pk8,testkey.x509.pem

2、签名文件生成方法,看到目录中的 README 文档

The test keys in this directory are used in development only and should
NEVER be used to sign packages in publicly released images (as that would
open a major security hole).

key generation
--------------

The following commands were used to generate the test key pairs:

  development/tools/make_key testkey  '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
  development/tools/make_key platform '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
  development/tools/make_key shared   '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'
  development/tools/make_key media    '/C=US/ST=California/L=Mountain View/O=Android/OU=Android/CN=Android/[email protected]'

通过 development/tools/ 下的 make_key 命令可以生成独一无二的 key,各个参数的含义如下

C —> Country Name (2 letter code)
ST —> State or Province Name (full name)
L —> Locality Name (eg, city)
O —> Organization Name (eg, company)
OU —> Organizational Unit Name (eg, section)
CN —> Common Name (eg, your name or your server’s hostname)
emailAddress —> Contact email address

一般不要输入密码,引出不必要的问题,直接回车。生成 key 后,拷贝至 build/target/product/security/新建文件夹/

例如 build/target/product/security/tencent/ 目录下,原来的 test相关 key 保留

3、修改 android 编译时默认签名使用 tencent/ 目录下

DEFAULT_SYSTEM_DEV_CERTIFICATE 默认 release

build/make/core/Makefile

-ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
-BUILD_KEYS := test-keys
+# ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
+# BUILD_KEYS := test-keys
+ifeq ($(findstring release,$(DEFAULT_SYSTEM_DEV_CERTIFICATE)), release)
+BUILD_KEYS := release-keys
 else

指定签名文件为 tencent 下的 releasekey
build/make/core/config.mk

DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
 else
-  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
+  # DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/testkey
+  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/target/product/security/tencent/releasekey
 endif

system/sepolicy/private/keys.conf
system/sepolicy/prebuilts/api/26.0/private/keys.conf

-ENG 	   : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USER 	   : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
-USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
+ENG       : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem
+USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/releasekey.x509.pem

4、查看签名apk的签名信息

keytool -printcert -jarfile xxx.apk
使用这个命令能够查看apk所使用签名的相关信息,如下图所示

在这里插入图片描述

5、系统不同签名文件的区别

sharedUserId

每个apk或文件,系统都会分配属于自己的统一的用户ID(UID),创建沙箱保证其他应用的影响或影响其他应用。如:一般应用只能访问自己包名下的文件(/data/data/pkgname),不能反问其他包名下的,其他应用也访问不了自己包名下的文件。
sharedUserId,拥有同一user id的应用 之间就可以共享数据库和文件,相互访问。这些应用可以运行在同一进程,也可以运行不同进程。

sharedUserId与签名文件

只有拥有相同sharedUserId标签的,且拥有相同签名的 应用才能分配相同的用户ID,实现数据共享。如果仅仅拥有相同sharedUserId标签,是无法确保安全的,也很容易被非法利用。

系统中5类签名文件说明

platform:平台的核心应用签名,签名的apk是完成系统的核心功能。这些apk所在的进程UID是system。manifest节点中有添加android:sharedUserId=“android.uid.system”。

media: 这个签名的apk是media/download的一部分。manifest节点中有添加android:sharedUserId=“android.media”。

shared:这个签名的apk可以和home/contacts进程共享数据。manifest节点中有添加android:sharedUserId=“android.uid.shared”。

testkey/releasekey:平台默认key。在编译中未指定LOCAL_CERTIFICATE的,默认是用testkey。因为testkey是公开的,任何人都可以获取,不安全,所以一般使用 自己创建releasekey作为默认key

6、更换 release 签名后 ota 升级错误日志

finding update package…
opening update package…
verifying update package…
installing update…
Source : alps/full_k37tv1_64_bsp/1583399226:eng/release-keys
Target : alps/full_k37tv1_64_bsp/1583972248:eng/release-keys
verifying current system…
Devices was remounted R/W 1 times
Last remount happened on Tue Jan 1 00:01:27 2019
E1004: system partition fails to recover
E:Error in @/cache/recovery/block.map(Status 7)

Installation aborted.

因为编译验证的 eng 版本,而且通过 adb remount 过,所以校验失败。
解决办法重新烧写,不要 remount,再次 ota 成功升级

参考文章

Android系统签名简介

发布了87 篇原创文章 · 获赞 157 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/u012932409/article/details/105069506