如何找出哪个密钥库用于签署应用程序?

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

我怎样才能匹配哪个密钥库被用来最初签署我的应用程序对我在我的机器上的各种密钥库?

首先,解压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安装目录。

您可以使用Java 7的密钥和证书pipe理工具keytool来检查密钥库或APK的签名而不提取任何文件。

APK的签名

 keytool -list -printcert -jarfile app.apk 

输出将显示APK文件app.apk的签名所有者/签发者和MD5,SHA1和SHA256指纹。

(请注意,在Java 7中引入了-jarfile参数;有关更多详细信息, 请参阅文档 。

签名的密钥库

 keytool -list -v -keystore release.jks 

输出将显示密钥库文件release.jks的别名(条目),以及证书指纹(MD5,SHA1和SHA256)。

如果APK和密钥库之间的SHA1指纹相匹配,那么您可以放心,该应用程序使用密钥签名。

要build立在Paul Lammertsma的答案上,这个命令将打印当前目录中所有APK的名称和签名(我使用sh,因为后来我需要将输出传送给grep):

find . -name "*.apk" -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:

find . -name "*.apk" -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的证书,则可能需要通过指纹进行比较。

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

解压apk并打开META-INF / ?. RSA文件。 ? 应该是CERT或者ANDROID或者可以是别的。 它会显示与你的apk相关的所有信息。