android系统签名及修改

本文介绍了Android系统签名的相关知识,包括platform、media、shared等各类签名的用途,以及.pk8和.x509.pem文件的含义。内容涵盖签名文件在系统中的位置,如何指定签名文件,生成和验证签名的方法,以及系统key文件的生成过程。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

系统签名文件目录:
build/make/target/product/security

主要签名文件

media.pk8
media.x509.pem

networkstack.pk8
networkstack.x509.pem

platform.pk8
platform.x509.pem

releasekey.pk8
releasekey.x509.pem

shared.pk8
shared.x509.pem

testkey.pk8
testkey.x509.pem

verity_key
verity.pk8
verity.x509.pem

各类签名说明:
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。

.pk8 与 .x509.pem
.pk8就是私钥文件,用于对apk进行签名。
.x509.pem是证书文件,相当于公钥。主要用于验证某个apk是否由相应的私钥签名。

在系统中配置和使用:
build/make/core/config.mk中

ifdef PRODUCT_DEFAULT_DEV_CERTIFICATE
  DEFAULT_SYSTEM_DEV_CERTIFICATE := $(PRODUCT_DEFAULT_DEV_CERTIFICATE)
else
  DEFAULT_SYSTEM_DEV_CERTIFICATE := build/make/target/product/security/testkey
endif

如果配置了PRODUCT_DEFAULT_DEV_CERTIFICATE,则使用PRODUCT_DEFAULT_DEV_CERTIFICATE。
否则使用build/make/target/product/security/testkey。


system/sepolicy/private/keys.conf中
    [@PLATFORM]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/platform.x509.pem

[@MEDIA]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/media.x509.pem

[@NETWORK_STACK]
ALL : $MAINLINE_SEPOLICY_DEV_CERTIFICATES/networkstack.x509.pem

[@SHARED]
ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/shared.x509.pem

# Example of ALL TARGET_BUILD_VARIANTS
[@RELEASE]
ENG       : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
USER      : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem
USERDEBUG : $DEFAULT_SYSTEM_DEV_CERTIFICATE/testkey.x509.pem

Android.mk使用LOCAL_CERTIFICATE指定签名文件
如:LOCAL_CERTIFICATE := platform

APK签名查看:
keytool -printcert -jarfile DKSystemManager.apk
签名者 #1:

签名:

所有者: EMAILADDRESS=zyfzhangyafei@163.com, CN=blackview, OU=blackview, O=blackview, L=sz, ST=gd, C=cn
发布者: EMAILADDRESS=zyfzhangyafei@163.com, CN=blackview, OU=blackview, O=blackview, L=sz, ST=gd, C=cn
序列号: 98d0393b4632d805
有效期为 Mon Feb 21 15:46:24 CST 2022 至 Fri Jul 09 15:46:24 CST 2049
证书指纹:
     MD5:  C5:DD:3B:32:18:81:30:BA:69:AF:C5:91:5F:00:C0:0D:49:34:61:3B
     SHA1: EA:50:DE:80:A8:4F:91:0C:52:8D:2F:75:B6:33:A6:CD:F9:DE:94:F6:4A:1C:13:A0:D7:9A:CD:DC:1D:20:F8:15
     SHA256: SHA256withRSA
签名算法名称: 2048 位 RSA 密钥
主体公共密钥算法: 3
版本: {10}

生成签名:
1.生成长度为2048位的RSA私钥

openssl genrsa -3 -out test.pem 2048

2.生成x509格式的公钥证书
openssl req -new -x509 -key test.pem -out test.x509.pem -days 10000

3.生成符合PKCS8标注的私钥文件
openssl pkcs8 -in test.pem -topk8 -outform DER -out test.pk8 -nocrypt

verity_key生成方法:
先执行上面三步,生成veritykey.x509.pem veritykey.pk8
1、make generate_verity_key (mmm system/extras/verity/)

2、执行 out/host/linux-x86/bin/generate_verity_key -convert veritykey.x509.pem verity_key

验证key:
openssl x509 -noout -subject -issuer -in media.x509.pem

输出
subject= /C=cn/ST=gd/L=sz/O=blackview/OU=blackview/CN=blackview/emailAddress=zyfzhangyafei@163.com
issuer= /C=cn/ST=gd/L=sz/O=blackview/OU=blackview/CN=blackview/emailAddress=zyfzhangyafei@163.com

系统key文件生成keystore

生成keystore文件主要是给外部apk开发签名使用的;

以常用的platform签名为例:

//如果之前没有生成platform.pem文件,现在可以执行以下命令生成

openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem

//生成platform.p12文件,设置对应的密码和alias名(app签名使用到)

openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:密码 -name 名称

//生成platform.jks(app使用的签名文件),启动

keytool -importkeystore -deststorepass 密码 -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 密码

//剩下的就是将platform.jks拷贝到app工程目录下设置alias名和密码即可

最终的platform.keystore即为我们所要的keystore

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

android framework

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值