【Android】Android签名:pem和pk8转化为keystore,jks
Android签名,pem和pk8转化为jks
- Android签名证书
- Android签名JKS
- JKS签名生成
- How to use
- 扩展 jks 转pem/pk8
Android签名证书
- 前因
- 最近更换了硬件设备,硬件厂商给了签名的pem,pk8,最新的版本没有给keystore,虽然现在使用jks了,实在没办法,就自己生成吧
- 在AndroidMenifest.xml配置sharedUserId需要系统签名
android:sharedUserId="android.uid.system"
- 目前获取系统权限的方法
3. platform签名
4. root固件 (有su)
5. 调用厂商封装好的系统权限的sdk
- 我们对第一点,做下记录,那么会拿到厂商提供的以下两个文件
platform.pk8
保存private key 加密
platform.x509.pem
X.509证书 存储数字证书,公钥信息还能存各种key
- 但是这两种文件不能直接进行签名,需要调用对App签名
java -jar signapk.jar platform.x509.pem platform.pk8 [old].apk [new].apk
- 对于这种方式
需要先生成apk,输入命令签名,再使用adb安装
调试
非常不方便,故想将pk8 和pem转成通用的jks或者keystore的签名
Note:
android一般除了使用jarsigner签名,还有使用signapk 后者位于android源码,前者位于jdk中。两者使用的文件格式不同前者使用JKS,后者使用公钥+私钥是分开的
Android签名JKS
- 准备工作
- openssl (需下载安装)
- platform.pk8 & platform.x509.pem (厂商提供)
- keytool (jdk自带,默认已安装jdk)
- openssl安装
- 下载 openssl
1. 官网,无Windows版本
2. 镜像,有Windows版本
- 这里给大家排个坑
首先对应好你的编译APP的JDK版本,如果是JDK8,就下载1.1.1,
如果是高的版本就下载3.0.0,不然你的JDK8keytool识别不了
- 配置系统环镜变量
JKS签名生成
主要分三步
- pk8 私钥解密pem格式
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
- 私钥通过公钥pem加密pk12, 需要输入两次密码
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name [别名]
- 通过java的keytool 工具生成 keystore, 别名需要跟步骤2的一致,同样输入两次密码
jks
keytool -importkeystore -destkeystore platform.jks -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass [密码] -alias [别名]
keystore
keytool -importkeystore -destkeystore platform.keystore -srckeystore platform.pk12 -srcstoretype PKCS12 -srcstorepass [密码] -alias [别名]
- 在这里我遇到了一个小坑
keytool 错误: java.io.IOException: parseAlgParameters failed: ObjectIdentifier() -- data isn't an object ID (tag = 48)
解决方案: 使用jdk16的keytool
How to use
- 项目使用jks
android {signingConfigs {MySignName {keyAlias "[别名]"keyPassword "[密码]"storeFile file('[jks路径]')storePassword "[密码]"}}buildTypes {debug {signingConfig signingConfigs.MySignName}release{signingConfig signingConfigs.MySignName}}
}
Example:
signingConfigs {signconfig {keyAlias 'platform'keyPassword 'android'storeFile file('../app/platform.jks')storePassword 'android'}
}buildTypes {debug {signingConfig signingConfigs.signconfigminifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}release {signingConfig signingConfigs.signconfigminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}
}
- Bingo,现在Android Studio 调试安装都是platform签名后的apk
扩展 jks 转pem/pk8
主要分五步
- java keytool 转成 pkcs12格式
keytool -importkeystore -srckeystore debug.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12
- pkcs12 dump pem格式
openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem
dump的文件格式
Bag AttributesfriendlyName: [别名]localKeyID: 54 69 6D 65 20 31 35 37 31 38 39 30 30 31 35 30 30 30
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
....
-----END PRIVATE KEY-----
Bag AttributesfriendlyName: [别名]localKeyID: 54 69 6D 65 20 31 35 37 31 38 39 30 30 31 35 30 30 30
subject=C = US, ST = California, L = Mountain View, O = Android, OU = Android, CN = Android, emailAddress = android@android.com
issuer=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” 到(新建个文件) cert.x509.pem
dos命令不好实现,建议采用bash
grep -zoe '-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----' tmp.rsa.pem>cert.x509.pem
- 复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem
dos命令不好实现,建议采用bash
grep -zoe '-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----' tmp.rsa.pem>private.rsa.pem
- 生成pk8格式的私钥
openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt
- 至此已经生成pem pk8 格式的两个签名文件
参考
Android签名证书 keystore jks pem x509
pk8/x509.pem转换为keystore
【Android】Android签名:pem和pk8转化为keystore,jks相关推荐
- android安全学习之2—android中.pem和.pk8是什么文件?
PKCS X509 什么是pem和pk8文件 在给android的apk签名的时候,需要用到一个扩展名为.pem和.pk8的文件,我第一反应,这啥啊,英文缩写?反正linux不用后缀名来区分文件,这到 ...
- Android签名证书 keystore jks pem x509
Android签名证书 背景 因业务需求,经常与系统厂商打交道,大多需要厂商开放root权限 目前获取系统权限的总结有三种方式(均有实际应用) platform签名 root固件 (有su) 调用厂商 ...
- android apk签名工具_Android 应用修改为系统签名的方法(macOS)
在做 Android 工控机应用开发时,经常会涉及到一些要系统签名才能做的功能,比如应用静默更新,关机重启等功能. 本文介绍系统签名的具体操作方法. 需要准备的东西,相关的签名文件.签名工具.要签名的 ...
- android软件更新模块实现的技术和方法,Android APK签名原理及方法
一 Android签名机制及原理 Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名.给APK签名 ...
- android系统签名app自动更新,【Android 进阶】Apk 使用系统签名
刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到 /system/app/*,咨询导师,得到反馈 app 需要使用系统的权限 在 Androi ...
- Android APK 签名比对
Android APK 签名比对 转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html Android APK ...
- android系统签名
1.在系统源码下找到signapk.jar platform.x509.pem platform.pk8三个文件,一般在build或prebuilt目录下 2.在AndroidManifest.xml ...
- 签名证书keystore,jks,pk8,x509.pem
.keystore,.jks本身是一个东西,没有区别:在eclipse上生成的是.keystore后缀,在andorid studio上生成的是.jks后缀: 生成.keystore http://w ...
- Android系统签名简介
apk的签名,简单说开发者可以通过签名 对应用进行标识和更新.包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装.这是一个非常重要的安全功能. 系统中的签名文件,也是对系统中应用进行签名 ...
- 证书Certificate以及android打包签名
证书: CA(证书信任机构) 也拥有一个证书(内含公钥和私钥).网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书. 如果用户想得到 ...
最新文章
- 2021年大数据Flink(三十九):​​​​​​​Table与SQL ​​​​​​总结 Flink-SQL常用算子
- IE8经常停止工作和显示异常
- 设计模式 — 创建型模式 — 单例模式
- tensorflow 显存 训练_【他山之石】训练时显存优化技术——OP合并与gradient checkpoint...
- boost::hana::hash用法的测试程序
- 带手势划动功能的日历源码
- 快速定位Webclient UI 登陆business role之后timeout问题
- 阿里云构建千万级别架构演变之路
- c语言实现的optics算法,基于深度学习的光学系统设计方法
- c++ log函数_第18节 函数的形参和实参-Web前端开发之Javascript-王唯
- 无法安装程序包“xxx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.5”的项目中
- 神经网络做什么比较合适,神经网络和计算机网络
- vijos 1443 月亮之眼
- 机器人 李永禄_第八届中国青少年机器人竞赛名单
- 中基鸿业家庭理财注意事项
- 店铺数据分析很重要吗?分析拼多多数据重要性,店铺引流效果有效提升。
- 视觉检测类项目如何开展测试
- python作排产计划表_排产计划表
- 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)
- Unity 创建Sprite导致的内存溢出奔溃问题