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是对应的,用来保存privatekey。
keystore文件转化为pk8+pem
1.将keystore文件转换为pkcs12格式
keytool-importkeystore-srckeystoremy.keystore-destkeystoretmp.p12-srcstoretypeJKS-deststoretypePKCS12
2.将PKCS12dump成pem
opensslpkcs12-intmp.p12-nodes-outtmp.rsa.pem
tmp.rsa.pem是文本格式可以直接查看。
打开文本可以看到私钥(PRIVATEKEY)和证书(CERTIFICATE);
复制“BEGINCERTIFICATE”“ENDCERTIFICATE”到(新建个文件)cert.x509.pem
复制“BEGINRSAPRIVATEKEY”“ENDRSAPRIVATEKEY”到(同上)private.rsa.pem
cert.x509.pem文件即是我们最后需要的证书文件
3.生成pk8格式的私钥
opensslpkcs8-topk8-outformDER-inprivate.rsa.pem-informPEM-outprivate.pk8-nocrypt
cert.x509.pemprivate.pk8
即是我们最后需要的文件。
*备注:
-nocrypt这个参数设定key加密如果设置了这个参数下面签名只要证书+key不需要密码了如果加密应该
opensslpkcs8-topk8-outform
DER-inprivate.rsa.pem-informPEM-outprivate.pk8接下来输入密码*
4.用法
java-jarsignapk.jarcert.x509.pemprivate.pk8unsigned.apksigned.apk
jarsigner的用法
jarsigner-verbose-keystoreandroid.keystore-signedjarandroid_signed.apkandroid.apkandroid.keystore
使用这种方式会报错:找不到的证书链。××必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。
jarsigner-verbose-keystoreDT.jks-signedjarsigned.apkunsigned.apk"别名"
补充知识:Android创建自己的pk8,x509.pem并给app签名
1,生成key
命令:keytool-genkey-v-keystoreapp.keystore-aliasgundam_wing-keyalgRSA-validity20000
控制台输出:
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[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
输入的密钥口令
(如果和密钥库口令相同,按回车):
[正在存储app.keystore]
这个命令会生成带组织/个人信息的key,并存放在app.keystore文件中
2,转换key的格式
命令:
keytool-importkeystore-srckeystoreapp.keystore-destkeystoretmp.p12-srcstoretypeJKS-deststoretypePKCS12
控制台会提示输出tmp.p12的密码以及app.keystore的密码,输入正确之后将会生成tmp.p12文件。
3,将PKCS12格式的keydump为可直接阅读的文本
命令:
opensslpkcs12-intmp.p12-nodes-outtmp.rsa.pem
dump过程中也会提示输入密码,正确输入之后可阅读的token会存储在tmp.rsa.pem中
4,提取
用文本编辑器打开tmp.rsa.pem,将从
-----BEGINPRIVATEKEY-----
到
-----ENDPRIVATEKEY-----这一段(包含这两个tag)的文本复制出来,新建为文件my_private.rsa.pem
将从
-----BEGINCERTIFICATE-----
到
-----ENDCERTIFICATE-----
这一段(包含这两个tag)的文本复制出来,新建为文件my.x509.pem(签名时用到的公钥)
5,转换,生成pk8格式的私钥
opensslpkcs8-topk8-outformDER-inmy_private.rsa.pem-informPEM-outmy_private.pk8-nocrypt
这个生成的my_private.pk8就是签名时用到的私钥
6,对apk签名
java-jarsignapk.jarmy.x509.pemmy_private.pk8my.apkmy_signed.apk
以上这篇Android签名文件转化为pk8和pem的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。