web-dev-qa-db-ja.com

アプリの署名に使用されたキーストアを確認する方法

署名されたアプリといくつかのキーストアファイルがあります。アプリを更新したいので、どのキーが使用されているのかを調べる必要があります。

自分のマシンにあるさまざまなキーストアに対して、最初に自分のアプリに署名するために使用したキーストアを一致させるにはどうすればよいですか。

216
xliiv

まず、APKを解凍し、ファイル/META-INF/Android_.RSAを抽出します(このファイルもCERT.RSAかもしれませんが、.RSAファイルは1つだけです)。

それからこのコマンドを発行して下さい:

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

ほら!このキーストアとエイリアス 'Android_key'でapkが署名されたことを確認できます。

KeytoolはJavaの一部なので、PATHにJavaのインストールディレクトリがあることを確認してください。

354
azgolfer

Java 7のキーおよび証明書管理ツールkeytoolを使用して、ファイルを抽出せずにキーストアまたはAPKの署名を確認できます。

APKの署名

keytool -list -printcert -jarfile app.apk

出力には、署名の所有者/発行者、およびAPKファイルapp.apkのMD5、SHA1、およびSHA256のフィンガープリントが表示されます。

-jarfile引数はJava 7で導入されたことに注意してください; 詳細はドキュメントを参照

キーストアの署名

keytool -list -v -keystore release.jks

出力には、証明書のフィンガープリント(MD5、SHA1、およびSHA256)とともに、キーストアファイルrelease.jksのエイリアス(エントリ)が表示されます。

APKとキーストアの間のSHA1フィンガープリントが一致すれば、そのアプリはそのキーで署名されていると安心できます。

263
Paul Lammertsma

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
16

署名証明書を表示するためのはるかに簡単な方法:

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

これはDNのみを表示するため、同じDNを持つ2つの証明書がある場合は、フィンガープリントで比較する必要があります。

11
Nikolay Elenkov

KeyStore Explorer のような証明書とキーストアを調べるためのフリーウェアはたくさんあります。

Apkを解凍し、META-INF /?RSAファイルを開きます。 ? CERTまたはAndroidになるか、他のものになる可能性があります。それはあなたのapkに関連付けられているすべての情報を表示します。

5
mhanifa