Android应用APK签名

keytooljarsigner 均是jdk提供的工具,JDK下载

生成APK签名文件keystore

  1. 使用keytool命令生成
    keytool -genkeypair -dname "cn=Mark Jones, ou=Java, o=Oracle,c=US" -alias business -keypass 123456 -keystore d:\genkey.jks -storepass 123123 -validity 1200
    将会生成签名文件d:\genkey.jks,有效期1200个月,别名business,密钥库的密码123123business的密码123456

  2. 使用IDE生成,IntellJ的生成截图如下


    Android应用APK签名_第1张图片
    image.png

查看签名文件的签名信息

keytool -list -v -keystore genkey.jks
需要用到之前生成签名文件的密钥库的密码123123

keytool -list -v -keystore genkey.jks
输入密钥库口令:

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: business
创建日期: 2017-10-13
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Mark Jones, OU=Java, O=Oracle, C=US
发布者: CN=Mark Jones, OU=Java, O=Oracle, C=US
序列号: 510b8a47
有效期开始日期: Fri Oct 13 15:18:36 CST 2017, 截止日期: Wed Apr 11 15:18:36 CST 2018
证书指纹:
         MD5: B0:F8:85:EF:57:57:17:4F:42:CA:12:4C:E9:04:F7:B4
         SHA1: 9A:40:81:D5:00:2B:83:04:13:67:BC:9F:32:41:C1:9A:D2:F6:9D:E8
         SHA256: 2C:8F:40:6D:42:24:8E:0F:E8:88:8B:42:43:3A:FA:49:14:BC:EF:F5:69:8C:67:ED:F1:33:A4:9D:37:7C:A4:27
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 68 02 88 E3 69 F1 2F D5   15 BF AC FF A5 FF E1 11  h...i./.........
0010: E2 38 F7 68                                        .8.h
]
]



*******************************************
*******************************************

对apk签名

  1. 用指定的keystore 签名apk
    jarsigner -keystore D:\genkey.jks -signedjar signed.apk unsigned.apk business
    unsigned.apkD:\genkey.jksbusiness密匙签名为signed.apk
    需要用到之前生成签名文件的两个密码
  2. 使用platform.x509.pem和platform.pk8对apk签名
    此种情况多见Android系统开发中,对系统应用签名
    java -jar signapk.jar platform.x509.pem platform.pk8 signed.apk unsigned.apk
  • signapk.jar 可以编译Android源码(mmm build/tools/signapk/) 得到,源码中位置prebuilts/sdk/tools/lib/signapk.jar也可能有
  • platform.x509.pem和platform.pk8在源码目录build/target/product/security/
  1. 使用集成IDE对APK签名
    多数IDE(IntellJ Idea)是在菜单build-->Generate Signed APK中


    Android应用APK签名_第2张图片
    使用集成IDE对APK签名

    Android Studio 可以自动签名,需要在build.gradle中添加如下配置

   signingConfigs {
        config {
            storeFile file('../genkey.jks')
            storePassword '123123'
            keyAlias "business"
            keyPassword '123456'
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.config
        }
    }

用keytool查看应用的签名

将签名后的signed.apk解压缩到目录signed,会存在签名文件.\signed\META-INF\BUSINESS.DSA,使用keytool可以查看

keytool -printcert -file D:\signed\META-INF\BUSINESS.DSA
所有者: CN=Mark Jones, OU=Java, O=Oracle, C=US
发布者: CN=Mark Jones, OU=Java, O=Oracle, C=US
序列号: 510b8a47
有效期开始日期: Fri Oct 13 15:18:36 CST 2017, 截止日期: Wed Apr 11 15:18:36 CST 2018
证书指纹:
         MD5: B0:F8:85:EF:57:57:17:4F:42:CA:12:4C:E9:04:F7:B4
         SHA1: 9A:40:81:D5:00:2B:83:04:13:67:BC:9F:32:41:C1:9A:D2:F6:9D:E8
         SHA256: 2C:8F:40:6D:42:24:8E:0F:E8:88:8B:42:43:3A:FA:49:14:BC:EF:F5:69:8C:67:ED:F1:33:A4:9D:37:7C:A4:27
         签名算法名称: SHA1withDSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 68 02 88 E3 69 F1 2F D5   15 BF AC FF A5 FF E1 11  h...i./.........
0010: E2 38 F7 68                                        .8.h
]
]

安卓应用中查看其他应用的签名

具体代码此处不做展示,详细工程源码 https://gitee.com/chenjimcom/getRawSignature

编译release的APK,安装后可以获取到应用getRawSignature的签名,经过比较,同之前生成的keystore的MD5: B0:F8:85:EF:57:57:17:4F:42:CA:12:4C:E9:04:F7:B4

Android应用APK签名_第3张图片
应用中查看其他应用的签名

参考文章
Docs About keytool By Oracle
Android 根据包名,获取应用程序的签名
java keytool证书工具使用小结

你可能感兴趣的:(Android应用APK签名)