서명 된 앱과 여러 키 저장소 파일이 있습니다. 앱을 업데이트하고 싶습니다. 사용 된 키 중 하나를 찾아야합니다.
컴퓨터에있는 다양한 키 저장소에 대해 앱에 원래 서명하는 데 사용한 키 저장소를 어떻게 일치시킬 수 있습니까?
답변
먼저 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와 관련된 모든 정보가 표시됩니다.
답변
apksigner
Android SDK의 일부인 도구를 사용하여이를 수행 할 수 있습니다 .
apksigner verify --print-certs my_app.apk
build-tools 디렉토리에서 apksigner를 찾을 수 있습니다. 예를 들면 다음과 같습니다.
~/Library/Android/sdk/build-tools/29.0.1/apksigner