Android签名,pem和pk8转化为jks

  • Android签名证书
  • Android签名JKS
  • JKS签名生成
  • How to use
  • 扩展 jks 转pem/pk8

Android签名证书

  • 前因
  1. 最近更换了硬件设备,硬件厂商给了签名的pem,pk8,最新的版本没有给keystore,虽然现在使用jks了,实在没办法,就自己生成吧
  2. 在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

  • 准备工作
  1. openssl (需下载安装)
  2. platform.pk8 & platform.x509.pem (厂商提供)
  3. keytool (jdk自带,默认已安装jdk)
  • openssl安装
  1. 下载 openssl

1. 官网,无Windows版本
2. 镜像,有Windows版本

  • 这里给大家排个坑

首先对应好你的编译APP的JDK版本,如果是JDK8,就下载1.1.1,
如果是高的版本就下载3.0.0,不然你的JDK8keytool识别不了

  1. 配置系统环镜变量

JKS签名生成

主要分三步

  1. pk8 私钥解密pem格式
openssl pkcs8 -in platform.pk8 -inform DER -outform PEM -out platform.priv.pem -nocrypt
  1. 私钥通过公钥pem加密pk12, 需要输入两次密码
openssl pkcs12 -export -in platform.x509.pem -inkey platform.priv.pem -out platform.pk12 -name [别名]
  1. 通过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

主要分五步

  1. java keytool 转成 pkcs12格式
keytool   -importkeystore -srckeystore debug.keystore   -destkeystore tmp.p12 -srcstoretype JKS         -deststoretype PKCS12
  1. 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-----
  1. 复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个文件) cert.x509.pem

dos命令不好实现,建议采用bash

grep -zoe '-----BEGIN CERTIFICATE-----.*-----END CERTIFICATE-----' tmp.rsa.pem>cert.x509.pem
  1. 复制 “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
  1. 生成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相关推荐

  1. android安全学习之2—android中.pem和.pk8是什么文件?

    PKCS X509 什么是pem和pk8文件 在给android的apk签名的时候,需要用到一个扩展名为.pem和.pk8的文件,我第一反应,这啥啊,英文缩写?反正linux不用后缀名来区分文件,这到 ...

  2. Android签名证书 keystore jks pem x509

    Android签名证书 背景 因业务需求,经常与系统厂商打交道,大多需要厂商开放root权限 目前获取系统权限的总结有三种方式(均有实际应用) platform签名 root固件 (有su) 调用厂商 ...

  3. android apk签名工具_Android 应用修改为系统签名的方法(macOS)

    在做 Android 工控机应用开发时,经常会涉及到一些要系统签名才能做的功能,比如应用静默更新,关机重启等功能. 本文介绍系统签名的具体操作方法. 需要准备的东西,相关的签名文件.签名工具.要签名的 ...

  4. android软件更新模块实现的技术和方法,Android APK签名原理及方法

    一 Android签名机制及原理 Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名.给APK签名 ...

  5. android系统签名app自动更新,【Android 进阶】Apk 使用系统签名

    刚入职的时候,固件中 app 需要在源码中编译,不是很理解,为什么不使用 IDE 编译,然后 copy 到 /system/app/*,咨询导师,得到反馈 app 需要使用系统的权限 在 Androi ...

  6. Android APK 签名比对

    Android APK 签名比对 转载请注明出处:http://www.blogjava.net/zh-weir/archive/2011/07/19/354663.html Android APK  ...

  7. android系统签名

    1.在系统源码下找到signapk.jar platform.x509.pem platform.pk8三个文件,一般在build或prebuilt目录下 2.在AndroidManifest.xml ...

  8. 签名证书keystore,jks,pk8,x509.pem

    .keystore,.jks本身是一个东西,没有区别:在eclipse上生成的是.keystore后缀,在andorid studio上生成的是.jks后缀: 生成.keystore http://w ...

  9. Android系统签名简介

    apk的签名,简单说开发者可以通过签名 对应用进行标识和更新.包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装.这是一个非常重要的安全功能. 系统中的签名文件,也是对系统中应用进行签名 ...

  10. 证书Certificate以及android打包签名

    证书: CA(证书信任机构) 也拥有一个证书(内含公钥和私钥).网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书. 如果用户想得到 ...

最新文章

  1. 2021年大数据Flink(三十九):​​​​​​​Table与SQL ​​​​​​总结 Flink-SQL常用算子
  2. IE8经常停止工作和显示异常
  3. 设计模式 — 创建型模式 — 单例模式
  4. tensorflow 显存 训练_【他山之石】训练时显存优化技术——OP合并与gradient checkpoint...
  5. boost::hana::hash用法的测试程序
  6. 带手势划动功能的日历源码
  7. 快速定位Webclient UI 登陆business role之后timeout问题
  8. 阿里云构建千万级别架构演变之路
  9. c语言实现的optics算法,基于深度学习的光学系统设计方法
  10. c++ log函数_第18节 函数的形参和实参-Web前端开发之Javascript-王唯
  11. 无法安装程序包“xxx”。你正在尝试将此程序包安装到目标为“.NETFramework,Version=v4.5”的项目中
  12. 神经网络做什么比较合适,神经网络和计算机网络
  13. vijos 1443 月亮之眼
  14. 机器人 李永禄_第八届中国青少年机器人竞赛名单
  15. 中基鸿业家庭理财注意事项
  16. 店铺数据分析很重要吗?分析拼多多数据重要性,店铺引流效果有效提升。
  17. 视觉检测类项目如何开展测试
  18. python作排产计划表_排产计划表
  19. 链表的基本操作(C语言)详解(摘取自C语言学习网2.5)
  20. Unity 创建Sprite导致的内存溢出奔溃问题

热门文章

  1. 【第十届“泰迪杯”数据挖掘挑战赛】B题:电力系统负荷预测分析 Baseline
  2. WebLogic下载地址 各版本
  3. 《软件质量保证与测试》学习笔记【第一章 软件测试基本概念】
  4. Go程序设计语言pdf
  5. 数据治理--元数据--元数据的作用
  6. UE4 C++:Interface接口
  7. 组态软件MCGS(昆仑通态)初识
  8. 《UNIX系统编程》
  9. Python 竟也可以写网页前端了
  10. cad2017单段线_CAD制图规定-2017最新版.doc