关于Java自带的签名工具-Keytool的使用

jarsigner 是JDK提供的针对jar包签名的通用工具,位于 JDK/bin/jarsigner

1.展示签名相关信息:

keytool -list -v -keystore [签名] -storepass [密码]

例如:keytool -list -v -keystore ./miwan.keystore

注意,该命令需要输入签名的密码;

-list:列出证书
-v:输出详细信息
-storepass:指定密钥库的解锁密码
-rfc 以可编码方式打印证书

2.查询apk的签名信息-方式1

keytool -printcert -jarfile [apk文件]

例如:keytool -printcert -jarfile game.apk文件

3.查询apk的签名信息-方式2

keytool -printcert -file [apk文件解压之后里面的签名文件]

4.修改密钥库中指定条目的密码

keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore 所在的密钥库

5.修改密钥库的密码

keytool -storepasswd -keystore ./yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码)

6.生成签名

通过-genkeypair可生成签名

keytool -genkeypair -alias "test" -keyalg "RSA" -keystore "test.keystore"

-genkeypair:生成一对非对称密钥;
-alias:指定密钥对的别名,该别名是公开的;
-keyalg:指定加密算法,本例中的采用通用的RAS加密算法;
-keystore:密钥库的路径及名称,不指定的话,默认在操作系统的用户目录下生成一个".keystore"的文件

可参考:https://www.jb51.net/article/238417.htm

7.签名方式一般有两种,一种是上面提到的jarsigner的方式

a:jar方式的签名命令:

jarsigner -digestalg SHA1 -sigalg SHA1withRSA -verbose -keystore youkeystore.keystore -storepass xxx -keypass xxx -signedjar  %1.new.apk %1 wanka.keystore

验证是否成功

jarsigner  -verify  -verbose  -certs  new_demo2.apk
当输出  jar已验证,表示签名成功;

b:apksigner方式的签名命令:

需要用到.pk8和x509.pem这两个文件以及signapk.jar依赖包

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

keystore与pk8+x509.pem的转换

参考文档:https://cloud.tencent.com/developer/article/1720058

我总结下来的是以下命令:

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

1. keytool -importkeystore -srckeystore test.keystore -srcstorepass wankasdk -destkeystore tmp.p12 -deststoretype pkcs12

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

3.打开tmp.rsa.pem文件,将里面的复制“BEGIN CERTIFICATE” “END CERTIFICATE” 到(新建个文件) platform.x509.pem,

复制 “BEGIN RSA PRIVATE KEY” “END RSA PRIVATE KEY” 到(同上) private.rsa.pem

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

注意:此种方式生成的签名方式V1签名:
从Android 7.0开始, 谷歌增加新签名方案 V2 Scheme (APK Signature);
但Android 7.0以下版本, 只能用旧签名方案 V1 scheme (JAR signing)

因为本人从事Android 游戏SDK开发工作,所以大部分时候还是使用的V1签名方式;下一篇文章我也将会介绍如何使用Android自带的apksigner进行V2签名;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值