我有一个签名的应用程序和几个keystore文件。我想更新应用程序,所以我需要找出哪个钥匙被使用了。

如何将最初用于为应用程序签名的密钥存储库与机器上的各种密钥存储库相匹配?


当前回答

查看签名证书的更简单方法:

jarsigner.exe -verbose -verify -certs myapk.apk

这将只显示DN,因此如果您有两个具有相同DN的cert,则可能必须通过指纹进行比较。

其他回答

根据Paul Lammertsma的回答,这个命令将打印当前目录下所有apk的名称和签名(我使用sh,因为稍后我需要将输出管道到grep):

找到。-exec echo "APK: {}" \;-exec sh -c 'keytool -printcert -jarfile "{}"' \;

样例输出:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

或者如果你只关心SHA1:

找到。-exec echo "APK: {}" \;-exec sh -c 'keytool -printcert -jarfile "{}" | grep SHA1' \;

样例输出:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00

查看签名证书的更简单方法:

jarsigner.exe -verbose -verify -certs myapk.apk

这将只显示DN,因此如果您有两个具有相同DN的cert,则可能必须通过指纹进行比较。

首先,解压APK并提取文件/META-INF/ANDROID_。RSA(这个文件也可以是CERT.RSA,但应该只有一个。RSA文件)。

然后发出这个命令:

keytool -printcert -file ANDROID_.RSA

你会得到这样的证书指纹:

     MD5:  B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
     SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68
     Signature algorithm name: SHA1withRSA

然后再次使用keytool打印出签名密钥库的所有别名:

keytool -list -keystore my-signing-key.keystore

您将获得一个别名列表及其证书指纹:

android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB

瞧!现在我们可以确定apk已经用这个密钥库和别名‘android_key’进行了签名。

Keytool是Java的一部分,所以确保你的PATH中有Java安装目录。

有许多免费软件可以检查证书和密钥存储库,如KeyStore Explorer。

解压apk并打开META-INF/?RSA文件。? 应该是CERT或ANDROID或其他东西。它将显示与apk相关的所有信息。

你可以使用apksigner工具,它是Android SDK的一部分:

Apksigner Verify --print-certs my_app.apk

你可以在build-tools目录中找到apksigner。例如: ~ /图书馆/ Android / sdk /构建工具/ 29.0.1 / apksigner