文章目录
- 一. platform.pk8、platform.x509.pem转成keystore
- 1.下载keytool-importkeypair工具
- 二. keystore转成platform.pk8、platform.x509.pem文件
- 1. 先把keystore文件转换为pkcs12格式
- 2. 将PKCS12 dump成pem
- 3. 生成pk8格式的私钥
一. platform.pk8、platform.x509.pem转成keystore
有时候我们需要实现如静默升级或安装应用之类的系统级功能的时候,我们除了需要将应用预装为系统应用之外,还需要使用系统签名对我们的应用进行签名。而系统的签名文件与我们常用的keystore普通应用签名文件是不同的,它是由platform.pk8、platform.x509.pem两个签名文件组成,虽然可以通过如下命令对apk进行签名:
java -jar signapk.jar platform.x509.pem platform.pk8 unsigned.apk signed.apk
但相比如直接通过Androidstudio配置打包出签好名的apk总归是不方便,那能不能将其转为keystore之类的签名文件呢?当然可以。
注:signapk.jar在安卓工具箱中,下载SignApk.jar
1.下载keytool-importkeypair工具
注意:工具不能在Windows环境下使用,本文使用的是虚拟机Ubuntu系统
下载keytool-importkeypair之后,将platform.x509.pem、platform.pk8放到keytool-importkeypair的统计目录下执行如下命令:
./keytool-importkeypair -k system.keystore -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias test
- -k 表示要生成的 keystore 文件的名字,这里为 system.keystore
- -p 表示要生成的 keystore 的密码,这里为 123456
- -pk8 表示要导入的 platform.pk8 文件
- -cert 表示要导入的platform.x509.pem
- -alias 表示给生成的 keystore 取一个别名,这是命名为 test
可以看到工具的同级目录下已经生成了一个system.keystore文件, 可以直接拿到Androidstudio中配置使用了。
二. keystore转成platform.pk8、platform.x509.pem文件
背景:最近做一个机顶盒的launcher项目,是一个接手项目,需要静默升级,里面用的签名是厂商A提供的一个system.keystore的签名文件,现在需要在厂商B的盒子上安装,同样要支持静默升级,但厂商B盒子的系统签名和厂商A的系统签名不同,所以有两个选择:一个是针对厂商B的盒子使用厂商B的系统签名,但这样就需要分开升级,维护两个升级任务;另外一个就是给厂商B提供当前签名对应的系统签名,但手上只有一个system.keystore文件,厂商A出于一些考虑并未提供对应的platform.pk8、platform.x509.pem两个系统签名文件,由于不想同一个应用去维护多个升级任务,所以只能想办法将system.keystore转为platform.pk8、platform.x509.pem文件,在此做一个记录。
下面这些操作均在linux环境下执行
1. 先把keystore文件转换为pkcs12格式
keytool -importkeystore -srckeystore system.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
如下图,当前目录下生成了一个tmp.p12文件:
2. 将PKCS12 dump成pem
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
然后以文本的形式打开tmp.rsa.pem文件
Bag AttributesfriendlyName: platformlocalKeyID: 54 69 6D 65 20 31 35 39 37 36 33 31 31 37 36 33 32 39
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
.......
-----END PRIVATE KEY-----
Bag AttributesfriendlyName: platformlocalKeyID: 54 69 6D 65 20 31 35 39 37 36 33 31 31 37 36 33 32 39
subject=C = US, ST = California, L = Mountain View, O = Android, OU = Android, CN = Android, emailAddress = android@android.comissuer=C = US, ST = California, L = Mountain View, O = Android, OU = Android, CN = Android, emailAddress = android@android.com-----BEGIN CERTIFICATE-----
......
-----END CERTIFICATE-----
复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个文件) platform.x509.pem,如下图:
这样就得到了platform.x509.pem文件了。
接下来,复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem
3. 生成pk8格式的私钥
执行如下命令,生成platform.pk8文件:
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out platform.pk8 -nocrypt
注:-nocrypt 这个参数设定key加密 如果设置了这个参数 下面签名 只要证书+key 不需要密码了 如果加密 应该 openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输入密码
至此platform.pk8、platform.x509.pem两个签名文件转换完成