高通msm8937/msm8953签名方法总结
1、生成公私钥匙
在高通平台代码中已经内置了生成公私钥的脚本,我们只需要按照执行格式生成我们需要的公私钥即可。每一种类型的key都是成对生成的,.509.pem后缀名的是公钥,.pk8后缀名的是私钥。
以下就是整个系统的不同用处的签名分类:
testkey – a generic key for packages that do not otherwise specify a key.
platform – a test key for packages that are part of the core platform.
shared – a test key for things that are shared in the home/contacts process.
media – a test key for packages that are part of the media/download system.
releasekey – a test key for customize your needs
根据自己的需求执行以下命令生成自己的签名文件:
Android 源码包里面提供了生成key的工具,development/tools/make_key, 命令如下:
./make_key 类型 ‘/C=CN/ST=ShangHai/L=ShangHai/O=XXX/OU=XXX/CN=XXXV/emailAddress=XXX’ rsa
其中类型是指以上罗列的5种的其一,每一个等号后面是需要按自己情况填写的信息。具体可根据README文件查看格式
2.更改编译规则,使编译过程中使用我们新生成的key对OTA进行签名
首先在build/core/Makefile里搜索testkey, 查看testkey是怎么用到编译系统的,看到如下编译选项:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
BUILD_KEYS := test-keys
else
BUILD_KEYS := dev-keys
endif
根据语法关系,我们可以修改成如下:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/签名文件)
BUILD_KEYS := 签名文件-keys
else
BUILD_KEYS := 签名文件-keys
endif
这样在编译的最后阶段会使用我们的key对OTA包签名。
3.修改external/sepolicy/keys.conf
[@RELEASE]
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签名
对于apk的签名,系统会根据apk里指定的key进行签名。如果系统中的apk的android.mk中没有设置LOCAL_CERTIFICATE的值,就默认使用testkey。
ifeq ($(LOCAL_CERTIFICATE),)
LOCAL_CERTIFICATE := $(DEFAULT_SYSTEM_DEV_CERTIFICATE)
endif
private_key := $(LOCAL_CERTIFICATE).pk8
certificate := $(LOCAL_CERTIFICATE).x509.pem
而如果设置成:
LOCAL_CERTIFICATE := platform
就代表使用platform来签名,这样的话这个apk就拥有了和system相同的签名
5、关闭签名功能
在配置文件中关闭内核签名的功能
kernel/msm-3.18/arch/arm64/configs/msmcortex_defconfig 调试版本
kernel/msm-3.18/arch/arm64/configs/msmcortex-perf_defconfig 非调试版本
将这两个文件里面的下面三个配置参数关闭
CONFIG_MODULE_SIG=n
CONFIG_MODULE_SIG_FORCE=n
CONFIG_MODULE_SIG_SHA512=n
重新编译内核