一、介绍
签名文件对于我们在做应用开发中,经常遇到,且签名文件不仅仅是保护应用安全,还会涉及到应用与底层之间的数据共享和API文件等问题。
在Android中,签名文件同样也存在这个问题。但是android中又区分系统应用和普通应用。系统应用可以通过android:sharedUserId="android.uid.system"同享系统uid,可以获取更高的权限。
所以在做系统应用开发的时候,经常需要使用AOSP的签名。
二、PK8签名转jks或者keystore
pk8只是aosp中的一种,编译时需要的签名文件都在build/make/target/product/security下面。在生成或者转jks的时候,需要借助openssl这个工具。
正常转有两种:window和Linux,通常,我们在window比较多,下面我将介绍window下的转jks的教程
Window环境下的教程
1.安装openssl:
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions
根据自己的环境,选择对应的即可。安装到C盘,都是默认安装。
2.将platform.pk8和platform.x509.pem从AOSP的build下(build/target/product/security)拷贝一份出来。
需要将Java切到jdk11,
手动切Jdk版本:set path=jdk bin+&path&,例如:set path=F:\android\jdk\bin;&path&
编译步骤:
1.pk8 私钥解密pem格式
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
platform.priv.pem:为输出的pem密钥格式
2.私钥通过公钥pem加密pk12, 需要输入两次密码
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name +别名
3通过java的keytool 工具生成 keystore, 别名需要跟步骤2的一致,同样输入两次密码
3.1jsk:
keytool -importkeystore -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass password-alias +别名
3.2keystore
keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass password-alias +别名
password:生成的密码,
别名:和第二步的别名一样,保持一致
生成后会报一个warm:
uses the MD5withRSA signature algorithm which is considered a security risk and is disabled
进行第四步
4.进行迁移:需要密码,是之前输入的确定密码
keytool -importkeystore -srckeystore platform.jks -destkeystore platform.jks -deststoretype pkcs12
接下来在bin下面platform.jks是新的秘钥文件,platform.old.jks 是第三步的文件
三、总结
1.需要JDK11,可以通过手动set,也可以改本地的
2.开发工具如果需要签名也需要JDK11
3.需要再Manifest中新增android:sharedUserId="android.uid.system",这样framework获取你的uid进行共享
4.注意:一般这种做法是针对你的app只在一个系统中使用,如果你的app是面向不同的设备,就无法使用,因为不同的设备签名文件不一样,甚至引起安装冲突等情况。这个方法是针对系统应用开发