Android签名⽂件转化为pk8和pem的实现
Android签名⼯具
常⽤的android的签名⼯具有:jarsigner 和apksigner。jarsigner使⽤keystore⽂件,apksigner使⽤pk8+x509.pem。
什么是.pem和.pk8⽂件
.pem
在android对apk签名的时候,.pem这种⽂件就是⼀个X.509的数字证书,⾥⾯有⽤户的公钥等信息,是⽤来解密的。⽂件格式⾥⾯不仅可以存储数字证书,还能存各种key。
.pk8
以.pk8为扩展名的⽂件,应该和PKCS #8是对应的,⽤来保存private key。
keystore⽂件转化为pk8+pem
1.将keystore⽂件转换为pkcs12格式
keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype
PKCS12
2. 将PKCS12 dump成pem
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
tmp.rsa.pem 是⽂本格式可以直接查看。
打开⽂本可以看到私钥(PRIVATE KEY )和证书(CERTIFICATE);
复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个⽂件) cert.x509.pem
复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem
cert.x509.pem ⽂件即是我们最后需要的证书⽂件
3.⽣成pk8格式的私钥
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
cert.x509.pem private.pk8
即是我们最后需要的⽂件。
*备注:
-nocrypt 这个参数设定key加密如果设置了这个参数下⾯签名只要证书+key 不需要密码了如果加密应该
openssl pkcs8 -topk8 -outform
DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输⼊密码*
4.⽤法
java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk
jarsigner 的⽤法
jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore
使⽤这种⽅式会报错:不到的证书链。×× 必须引⽤包含专⽤密钥和相应的公共密钥证书链的有效密钥库密钥条⽬。
jarsigner -verbose -keystore DT.jks -signedjar signed.apk unsigned.apk "别名"
补充知识:Android 创建⾃⼰的pk8, x509.pem并给app签名
1, ⽣成key
命令: keytool -genkey -v -keystore app.keystore -alias gundam_wing -keyalg RSA -validity 20000
控制台输出:
输⼊密钥库⼝令:
再次输⼊新⼝令:
您的名字与姓⽒是什么?
[Unknown]: TechStone
您的组织单位名称是什么?
[Unknown]: Gundam
您的组织名称是什么?
[Unknown]: Gundam
您所在的城市或区域名称是什么?
[Unknown]: Shanghai
您所在的省/市/⾃治区名称是什么?
[Unknown]: Shanghai
该单位的双字母国家/地区代码是什么?
[Unknown]: zh
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh是否正确?
[否]: Y
正在为以下对象⽣成 2,048 位RSA密钥对和⾃签名证书 (SHA256withRSA) (有效期为 20,000 天):
CN=TechStone, OU=Gundam, O=Gundam, L=Shanghai, ST=Shanghai, C=zh
输⼊ <gundam_wing> 的密钥⼝令
(如果和密钥库⼝令相同, 按回车):
[正在存储app.keystore]
这个命令会⽣成带组织/个⼈信息的key,并存放在app.keystore⽂件中
2, 转换key的格式
命令:
keytool -importkeystore -srckeystore app.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
控制台会提⽰输出tmp.p12的密码以及app.keystore的密码,输⼊正确之后将会⽣成tmp.p12⽂件。
3, 将PKCS12格式的key dump为可直接阅读的⽂本
命令:
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
dump过程中也会提⽰输⼊密码,正确输⼊之后可阅读的token会存储在tmp.rsa.pem中
4, 提取
⽤⽂本编辑器打开tmp.rsa.pem,将从
-----BEGIN PRIVATE KEY-----
-----END PRIVATE KEY-----
这⼀段(包含这两个tag)的⽂本复制出来,新建为⽂件my_private.rsa.pem
将从
-----BEGIN CERTIFICATE-----
android获取真正的签名
-----END CERTIFICATE-----
这⼀段(包含这两个tag)的⽂本复制出来,新建为⽂件my.x509.pem (签名时⽤到的公钥)
5, 转换,⽣成pk8格式的私钥
openssl pkcs8 -topk8 -outform DER -in my_private.rsa.pem -inform PEM -out my_private.pk8 -nocrypt
这个⽣成的my_private.pk8就是签名时⽤到的私钥
6, 对apk签名
java -jar signapk.jar my.x509.pem my_private.pk8 my.apk my_signed.apk
以上这篇Android签名⽂件转化为pk8和pem的实现就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。