앱 서명에 사용 된 키 스토어를 어떻게 알 수 있습니까?


260

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

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


나는 당신이 그것을 찾을 수 있는지 알지 못하지만, 잘못된 키로 앱에 서명하면 개발자 콘솔 (앱을 게시하는 곳)이 잘못되었음을 알려줍니다. 당신은 그들 모두를 시도 할 수 있습니다.
logcat

공개 키 '개발자 콘솔'> '프로필 편집'이 있습니다. 어떻게 든 스스로 도울 수 있습니까?
xliiv

실수로 키 저장소 파일을 삭제 한 경우 키 저장소 파일을 다시 작성하는 방법은 무엇입니까?
Maveň ツ

@ Maveň ツ 당신은 할 수 없습니다. 키 스토어를 풀면 건배됩니다. Google은 서명 정보를 보유한 [App Signing]을 소개했습니다. [앱 서명] : support.google.com/googleplay/android-developer/answer/…
mir

답변:


402

먼저 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 설치 디렉토리가 있는지 확인하십시오.


1
감사합니다. 이 작업을 수행하는 도구를 github 프로젝트에 추가했습니다. github.com/RichardBronosky/ota-tools/blob/master/…
Bruno Bronosky

안녕하세요, 저는이 명령을 이해하지 ~ 키 도구 -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

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 2016 년

2
@goRGon 사실, -jarfile인수는 Java 7에서 도입되었습니다. 답변을 업데이트했습니다.
Paul Lammertsma 2016 년

41
이것은 정답입니다. 더는 필요하지 압축을 해제
제이 섹 Kwiecień을

1
Java 1.6이 여전히 기본적으로 Mac에 제공되는 것은 이상합니다. 최신 버전으로 업데이트하는 것이 좋습니다.
Paul Lammertsma

2
@RichardBronosky 그건 사실이 아닙니다. iOS 개발자없이 3 년 이상 Android 개발자였습니다. 그러나 나는 다른 이유로 당신의 요점에 동의합니다. Java 1.6은 지금까지 가장 확장 된 버전이거나 최소한 널리 퍼져있는 것으로 보이며 허용되는 솔루션이 1.6 및 1.7 모두에서 작동하지만이 솔루션은 1.7에서만 작동하므로 이것이 허용되는 대답이라고 생각하지 않습니다 ( 아직!). (또한 승인 된 답변은 2012 년 4 월부터 작성되는 2012 년 양식입니다.)
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

@PaulLammertsma 그렇습니다.
Artem Russakovskii

11

서명 인증서를 보는 훨씬 쉬운 방법 :

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

DN 만 표시되므로 DN이 동일한 인증서가 두 개인 경우 지문으로 비교해야 할 수 있습니다.


DN이란 무엇입니까? X.509, CN = {firstname and lastname} [인증서는 {date from}에서 {date_to}까지 유효합니다]
xliiv

DN은 '고유 이름 (Distinguished Name)'을 나타내며 귀하의 경우 'CN = {firstname and lastname}'부분입니다.
니콜라이 엘렌 코프

6

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

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


4

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

apksigner verify --print-certs my_app.apk

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.