APP在安装前,需要进行签名,keytool工具可以生成证书,通过生成的证书来进行签名。
keytool工具在javaJDK中有,在android开发SDK中也有这个工具;
keytool -genkeypair -alias mykey -keyalg RSA -keystore mykey.keystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456 -validity 180
翻译成人话就是:创建一个新的秘钥,别名是mykey,加密算法是RSA,保存路径是当前路径,名字是mykey.keystore,创建此证书的机构是localhost,组织是localhost,组织名称是localhost,地点是localhost,城市是localhost,国家是localhost,密码是123456,指定密码条目,保存密码时间为180天
-dname 表示密钥的Distinguished Names, 表明了密钥的发行者身份
CN=commonName 注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost
-alias 和keystore关联的别名,这个alias通常不区分大小写
-keystore 密钥保存在D:盘目录下的mykeystore文件中
-storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出
-validity 该密钥的有效期为 180天 (默认为90天)
-keystore 用户宿主目录中名为 .keystore 的文件
cacerts证书文件(The cacerts Certificates File)
该证书文件存在于java.home\jre\lib\security目录下,是Java系统的CA证书仓库
keytool -list -v -keystore mykey.keystore
使用工具jarsigner,这个工具和keytool应该在同一个目录下面,
jarsigner -verbose -keystore [keystorePath] -signedjar [apkOut] [apkin] [alias]
jarsigner.exe -verbose -keystore mykey.keystore -signedjar after.apk before.apk mykey
这命令翻译成人话:对APP进行签名,签名的时候输出签名的详细信息,秘钥证书的位置在哪里,签名后的APP存在当前文件夹下after.apk,需要签名的APP存在当前文件夹下before.apk,秘钥证书的别名是mykey
-keystore [keystorePath] 密钥的库的位置
使用keytool工具进行查看APP签名信息,使用签名前和签名后的APP进行一个对比:
keytool -printcert -jarfile app.apk
还有在使用apktool对APP进行反编译后,APP的文件夹中会有CERT.RSA文件: