转自:http://www.jianshu.com/p/3bd5c68cc44d

常用的android的签名工具有两个即jarsigner 和apksigner。这两种使用的key格式不一样,keystore格式转pk8+x509.pem

1. 将keystore文件转换为pkcs12格式

  1. keytool -importkeystore -srckeystore my.keystore -destkeystore tmp.p12 -srcstoretype JKS -deststoretype PKCS12

2. 将PKCS12 dump成pem

  1. openssl pkcs12 -in tmp.p12 -nodes -out tmp.rsa.pem

tmp.rsa.pem 是文本格式可以直接查看

打开文本:

  1. Bag Attributes
  2. friendlyName: dtcamera
  3. localKeyID: 54 69 6D 65 20 31 34 35 38 38 31 37 33 31 30 37 30 36
  4. Key Attributes: <No Attributes>
  5. -----BEGIN PRIVATE KEY-----
  6. -----END PRIVATE KEY-----
  7. Bag Attributes
  8. friendlyName: dtcamera
  9. localKeyID: 54 69 6D 65 20 31 34 35 38 38 31 37 33 31 30 37 30 36
  10. subject=/CN=DTC
  11. issuer=/CN=DTC
  12. -----BEGIN CERTIFICATE-----
  13. -----END CERTIFICATE-----

打开文本可以看到私钥(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格式的私钥

  1. openssl pkcs8 -topk8 -outform DER -in private.rsa.pem -inform PEM -out private.pk8 -nocrypt

cert.x509.pem private.pk8 即是我们最后需要的文件。

  1. *备注:
  2. -nocrypt 这个参数设定key加密 如果设置了这个参数 下面签名 只要证书+key 不需要密码了 如果加密 应该
  3. openssl pkcs8 -topk8 -outform
  4. DER -in private.rsa.pem -inform PEM -out private.pk8 接下来输入密码*

4. 用法

  1. java -jar signapk.jar cert.x509.pem private.pk8 unsigned.apk signed.apk

jarsigner 的用法

  1. jarsigner -verbose -keystore android.keystore -signedjar android_signed.apk android.apk android.keystore

使用这种方式会报错:找不到 的证书链。×× 必须引用包含专用密钥和相应的公共密钥证书链的有效密钥库密钥条目。

  1. jarsigner -verbose -keystore DT.jks -signedjar signed.apk unsigned.apk "别名"

具体可参考 参考链接1
感谢橘小兔-一米阳光的文章,参考链接2,帮我解决了这个问题,亲测可行。

参考链接

  1. 命令行jarsigner签字和解决找不到证书链错误
  2. keystore文件转换格式为pk8+x509.pem
  3. jarsigner - JAR 签名和校验工具

android初级篇之apk签名key keystore格式转pk8+x509.pem的更多相关文章

  1. [转帖]APP逆向神器之Frida【Android初级篇】

    APP逆向神器之Frida[Android初级篇] https://juejin.im/post/5d25a543e51d455d6d5358ab 说到逆向APP,很多人首先想到的都是反编译,但是单看 ...

  2. [Android]使用 Eclipse 给 APK 签名时遇到的两个问题及解决办法

    问题 今天用 APK 反编译工具看了一下自己项目生成的 APK 文件,发现代码并没有混淆,于是设置了用 ProGuard 混淆代码,可是混淆是必须在非 Debug 模式才会生效的,即使你是以 Rele ...

  3. [Android Tips] 17. 查看 APK 签名信息

    从 APK 文件中获取签名信息 方法一 $ keytool -list -printcert -jarfile <path of APK> 方法二 解压 APK 文件,释放出 META-I ...

  4. android开发里跳过的坑——android studio打包的APK签名无效

    近期把一个项目从eclipse上移植到了android studio, 在打包发布APK的时候,应用上传到应用市场时提示取不到签名.但是,我确实使用了 做过签名了. 然后换了一种打包方式 build ...

  5. 查看apk签名 和 keystore 的信息

    原文出处:https://www.jianshu.com/p/90b698002215 1.keytool -printcert -file ***(把apk文件下的META- INF文件夹解压出来, ...

  6. android获取未安装APK签名信息及MD5指纹

    站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...

  7. 001.android初级篇之ToolBar

    官方的最新support library v7中提供了新的组件ToolBar,用来替代之前的ActionBar,实现更为弹性的设计在 material design 也对之做了名称的定义:App ba ...

  8. android逆向基础:apk 反编译 重打包 重签名

    apk 反编译大家都比较熟悉,这里只做一个笔记. 1 反编译 apk apktool d perfect.apk 这样就把资源文件解压缩了, classes.dex 也反编译成了 smali 文件 2 ...

  9. 深入理解gradle编译-Android基础篇

    深入理解gradle编译-Android基础篇 导读 Gradle基于Groovy的特定领域语言(DSL)编写的一种自动化建构工具,Groovy作为一种高级语言由Java代码实现,本文将对Gradle ...

随机推荐

  1. WKWebView与JavaScript交互基础

    login.html 代码 <!DOCTYPE html> <html> <head> <title>使用JavaScript</title> ...

  2. 第二章 Rest框架 Nancy

    正如你看到的,Nancy有两个主要用途. 其中第一项是作为一种通用的基于 REST 框架,可替代 ASP.NET Web API 或其他Rest工具包. 默认情况下,Nancy提供一流的路由和内容协商 ...

  3. 执行mvn 报错 source-1.5 中不支持 diamond运算符

    编译版本出现了问题 <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> < ...

  4. iptables过滤设置服务端口

    1.为SSH跟换连接端口 修改SSH配置文件:/etc/ssh/sshd_config #找到Port 22,这里是标识默认使用22端口,修改为想要的端口. Port Port 2.查看iptable ...

  5. Swift3.0P1 语法指南——构造器

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  6. 错误:java.util.Map is an interface, and JAXB can't handle interfaces.

    问题: 在整合spring+cxf时报错java.util.Map is an interface, and JAXB can't handle interfaces. 解决方法: 将服务端的serv ...

  7. 高程(4):执行环境、作用域、上下文执行过程、垃圾收集、try...catch...

    高程三 4.2.4.3 一.执行环境 1.全局执行环境是最外层的执行环境. 2.每个函数都有自己的执行环境,执行函数时,函数环境就会被推入一个当前环境栈中,执行完毕,栈将其环境弹出,把控制器返回给之前 ...

  8. 整理:Javascript获取数组中的最大值和最小值的方法汇总

    方法一: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 //最小值 Array.prototype.min = function ...

  9. PYTHON 写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

    def a4(arg): ret = {} for key,value in arg.items(): if len(value) > 2: ret[key] = value[0:2] else ...

  10. ffmpeg-20160929-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...