アプリの署名に使用されたキーストアを確認するにはどうすればよいですか?


260

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

最初にアプリに署名するために使用したキーストアを、マシンにあるさまざまなキーストアと照合するにはどうすればよいですか?


私はそれを見つけることができるかどうかわかりませんが、間違ったキーでアプリに署名すると、開発者コンソール(アプリを公開する場所)はそれが間違っていると通知します。それらすべてを試すことができます。
logcat

公開キー「開発者コンソール」>「プロファイルの編集」があります。とにかくそれを使って自分を助けることはできますか?
xliiv

キーストアファイルが誤って削除された場合の再作成方法
Mavenのツ

@Maveňツできません。キーストアを失うと、乾杯します。Googleは[アプリ署名]を導入しました。このアプリは、署名情報を保持しています。[アプリケーションの署名]:support.google.com/googleplay/android-developer/answer/...
ミール

回答:


402

まず、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インストールディレクトリが含まれていることを確認してください。


1
これありがとう。これを行うためのツールをgithubプロジェクトに追加しました。github.com/RichardBronosky/ota-tools/blob/master/...
ブルーノBronosky

こんにちは、私は、このコマンドを理解していない〜のkeytool -list -keystore私の署名-key.keystore、私の署名-key.keystoreものだ
Thoman

2
@Thoman my-signing-key.keystoreは、apkに署名するために使用されるキーを含むキーストアファイルの名前です
1800 INFORMATION

どうもありがとうございました!アプリがPlayStoreによって再署名されたため、Googleログインが失敗します。PlayStoreからAPKを直接ダウンロードし、実際のSHA1を見つけてGoogle Cloudコンソールに登録する必要がありました。
Alvin Rusli、2018年

335

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

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フィンガープリントが一致する場合、そのアプリはキーで署名されているので安心できます。


1
@goRGon Java 7以降を使用していますか?
Paul Lammertsma、2014年

2
@goRGon確かに、この-jarfile議論はJava 7で導入されました。答えを更新しました。
ポールランメルツマ2014年

41
これは受け入れられる答えになるはずです。解凍の必要はありません
JacekKwiecień14年

1
Macでは、Java 1.6がデフォルトでまだ出荷されているのは奇妙です。より新しいバージョンに更新することをお勧めします。
Paul Lammertsma 2014

2
@RichardBronosky確かにそうではありません。私は3年以上Android開発者としてiOS開発をしていません。しかし、私はさまざまな理由であなたの主旨に同意します。Java 1.6はこれまでで最も拡張されたバージョンであるか、少なくとも広く普及しているようです。承認されたソリューションは1.6と1.7の両方で機能しますが、これは1.7でのみ機能するため、これは承認された答えではないはずです(まだ!)。(また、受け入れられた回答はフォーム2012ですが、これは2014年4月のものです)
Fran Marzoa

17

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

面白い!私が私的にホストしている配布ストアの検証で非常によく似たアプローチを使用して、アプリが正しく署名されていないことをユーザーに通知しました。また、キーエイリアスが「androiddebugkey」であり、別の言い方をしたメッセージが表示されるかどうかを確認するために、特別な注意を払います。Google Playもほぼ同じように検証を行うと思います。APKMirrorでAPKを検証するためにこれを使用していると思いますか?
Paul Lammertsma 2016年

@PaulLammertsmaはい、そうです。
Artem Russakovskii 2016

11

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

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

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


DNとは?ほとんどの場合、次のような行がたくさんあります。X.509、CN = {firstname and lastname} [証明書は{date from}から{date_to}まで有効です]
xliiv

DNは「識別名」の略で、あなたの場合は「CN = {firstname and lastname}」の部分です。
Nikolay Elenkov

6

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

apkを解凍し、META-INF / ?. RSAファイルを開きます。?CERTまたはANDROIDであるか、他の何かである可能性があります。APKに関連するすべての情報が表示されます。


4

これapksignerは、Android SDKの一部であるツールを使用して行うことができます。

apksigner verify --print-certs my_app.apk

apksignerは、build-toolsディレクトリ内にあります。例えば: ~/Library/Android/sdk/build-tools/29.0.1/apksigner

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.