署名されたアプリといくつかのキーストアファイルがあります。アプリを更新したいので、どのキーが使用されたかを調べる必要があります。
最初にアプリに署名するために使用したキーストアを、マシンにあるさまざまなキーストアと照合するにはどうすればよいですか?
署名されたアプリといくつかのキーストアファイルがあります。アプリを更新したいので、どのキーが使用されたかを調べる必要があります。
最初にアプリに署名するために使用したキーストアを、マシンにあるさまざまなキーストアと照合するにはどうすればよいですか?
回答:
まず、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
出来上がり!これで、apkがこのキーストアとエイリアス「android_key」で署名されていると判断できます。
KeytoolはJavaの一部であるため、PATHにJavaインストールディレクトリが含まれていることを確認してください。
Java 7のキーおよび証明書管理ツールkeytool
を使用して、ファイルを抽出せずにキーストアまたはAPKの署名を確認できます。
keytool -printcert -jarfile app.apk
出力から、署名の所有者/発行者とAPKファイルのMD5、SHA1、SHA256フィンガープリントが明らかになりますapp.apk
。
(この-jarfile
引数はJava 7で導入されたことに注意してください。詳細については、ドキュメントを参照してください。)
keytool -list -v -keystore release.jks
出力release.jks
により、証明書のフィンガープリント(MD5、SHA1、SHA256)とともに、キーストアファイル内のエイリアス(エントリ)が明らかになります。
APKとキーストアのSHA1フィンガープリントが一致する場合、そのアプリはキーで署名されているので安心できます。
-jarfile
議論はJava 7で導入されました。答えを更新しました。
Paul Lammertsmaの回答に基づいて、このコマンドは現在のディレクトリにあるすべてのAPKの名前と署名を出力します(後で出力をgrepにパイプする必要があるため、shを使用しています)。
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を持つ2つの証明書がある場合は、フィンガープリントで比較する必要がある場合があります。
KeyStore Explorerなどの証明書とキーストアを調べるためのフリーウェアはたくさんあります。
apkを解凍し、META-INF / ?. RSAファイルを開きます。?CERTまたはANDROIDであるか、他の何かである可能性があります。APKに関連するすべての情報が表示されます。
これapksigner
は、Android SDKの一部であるツールを使用して行うことができます。
apksigner verify --print-certs my_app.apk
apksignerは、build-toolsディレクトリ内にあります。例えば:
~/Library/Android/sdk/build-tools/29.0.1/apksigner