Android开发 系统签名jks制作和问题汇总
1 前提和介绍
前提:需要有Android相对应版本的security文件夹,对应文件需要platform.pk8、platform.x509.pem
介绍如下
platform.pk8 私钥,原始的 DER 格式,Android 默认使用 .pk8 保存
platform.x509.pem 公钥证书,PEM 格式,Android 默认的签名证书
platform.pem 中间生成的私钥(从.pk8 转换为 PEM 格式)
platform.p12 中间生成的 PKCS12 密钥库,包含私钥和证书
platform.jks 最终生成的 JKS 密钥库
2 主要命令行
主要命令行只有三句
1
openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem2 (这里2的代码可以都做一下尝试)
openssl pkcs12 -export -in platform.x509.pem -out platform.p12 -inkey platform.pem -password pass:111111 -name key0openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -passout pass:111111 -name key0keytool -importkeystore -deststorepass 111111 -destkeystore ./platform.jks -deststoretype JKS -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 1111113
该后缀为keystore
keytool -importkeystore -deststorepass 111111 -destkeystore ./platform.keystore -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 111111
该后缀为jks 可直接用于as签名
keytool -importkeystore -deststorepass 111111 -destkeystore ./platform.jks -deststoretype JKS -srckeystore ./platform.p12 -srcstoretype PKCS12 -srcstorepass 111111
3 签名过程中主要遇到的问题
1 最后生成jks文件时报错密码错误 java.io.IOException: keystore password was incorrect
加-v查看了详细报错参数
keytool -importkeystore -v -deststorepass 111111 -destkeystore platform.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass 111111
具体如下
java.security.UnrecoverableKeyException: failed to decrypt safe contents entry: javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption.
解决方案:
切换高版本jdk,我用jdk8编译Android7签名失败,换成jdk11可以成功签名,但签名Android9又失败,但换成jdk17成功,具体原因目前也不是特别清楚,猜测是兼容性。
写得很好的一个文章
从生成keystore到完成Android应用签名的全过程指南
https://blog.csdn.net/weixin_35006125/article/details/142892554