앱 서명에 사용 된 키 스토어를 어떻게 알 수 있습니까? 사용 된 키 중 하나를 찾아야합니다. 컴퓨터에있는 다양한

서명 된 앱과 여러 키 저장소 파일이 있습니다. 앱을 업데이트하고 싶습니다. 사용 된 키 중 하나를 찾아야합니다.

컴퓨터에있는 다양한 키 저장소에 대해 앱에 원래 서명하는 데 사용한 키 저장소를 어떻게 일치시킬 수 있습니까?



답변

먼저 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의 키 및 인증서 관리 도구 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 지문이 일치하면 해당 앱이 키로 서명되어 안심할 수 있습니다.


답변

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이 동일한 인증서가 두 개인 경우 지문으로 비교해야 할 수 있습니다.


답변

KeyStore Explorer 와 같은 인증서 및 키 저장소를 검사하는 프리웨어가 많이 있습니다 .

APK의 압축을 풀고 META-INF / ?. RSA 파일을 엽니 다. ? CERT 또는 ANDROID이거나 다른 것일 수 있습니다. APK와 관련된 모든 정보가 표시됩니다.


답변

apksignerAndroid SDK의 일부인 도구를 사용하여이를 수행 할 수 있습니다 .

apksigner verify --print-certs my_app.apk

build-tools 디렉토리에서 apksigner를 찾을 수 있습니다. 예를 들면 다음과 같습니다.
~/Library/Android/sdk/build-tools/29.0.1/apksigner