मुझे यह कैसे पता चलेगा कि ऐप को साइन करने के लिए किस कीस्टॉर का उपयोग किया गया था?


260

मेरे पास एक ऐप है जिस पर हस्ताक्षर किए गए हैं और कई कीस्टोर फाइलें हैं। मैं ऐप को अपडेट करना चाहता हूं, इसलिए मुझे यह पता लगाने की आवश्यकता है कि किस कुंजी का उपयोग किया गया था।

मैं अपनी मशीन पर विभिन्न कीस्टोर्स के खिलाफ मूल रूप से मेरे ऐप पर हस्ताक्षर करने के लिए किस कीस्टॉर का उपयोग कर सकता हूं?


मुझे नहीं पता कि आप इसे ढूंढ सकते हैं या नहीं, लेकिन यदि आप गलत कुंजी के साथ ऐप पर हस्ताक्षर करते हैं, तो डेवलपर कंसोल (जहां आप एप्लिकेशन प्रकाशित करते हैं) आपको बताएंगे कि यह गलत है। आप उन सभी की कोशिश कर सकते हैं।
logcat

एक सार्वजनिक कुंजी 'डेवलपर कंसोल'> 'प्रोफ़ाइल संपादित करें' है। क्या मैं इसका इस्तेमाल किसी भी तरह से खुद की मदद के लिए कर सकता हूं?
xliiv

अगर गलती से डिलीट हो गया तो कीस्टोर फाइल को फिर से कैसे बनाया जाए?
मव

@ Maveツ M आप नहीं कर सकते। यदि आप अपने कीस्टोर को ढीला करते हैं, तो आप टोस्ट हैं। Google ने [App Signing] की शुरुआत की, जहाँ वे हस्ताक्षर करने की जानकारी रखते हैं। [ऐप साइनिंग]: support.google.com/googleplay/android-developer/answer/…
mir

जवाबों:


401

सबसे पहले, एपीके को अनज़िप करें और फ़ाइल /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 -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

देखा! अब हम निर्धारित कर सकते हैं कि एपीके को इस कीस्टॉर के साथ साइन किया गया है, और उपनाम 'android_key' के साथ।

Keytool जावा का हिस्सा है, इसलिए सुनिश्चित करें कि आपके PATH में जावा इंस्टॉलेशन dir है।


1
इसके लिए शुक्रिया। मैंने अपने गिथब प्रोजेक्ट में इसे करने के लिए एक टूल जोड़ा। github.com/RichardBronosky/ota-tools/blob/master/…
ब्रूनो ब्रोंस्की

हाय मैं इस आदेश को समझ में नहीं आता ~ Keytool -List -keystore मेरे हस्ताक्षर-key.keystore, क्या मेरी हस्ताक्षर-key.keystore है
Thoman

2
@ थोमन माय-साइनिंग-की.स्टिस्टोर उस कीस्टॉर फाइल का नाम है जिसमें एपीके साइन करने के लिए उपयोग की जाने वाली कुंजियाँ हैं
1800 सूचना

इसके लिए बहुत - बहुत धन्यवाद! हमारे ऐप को PlayStore द्वारा फिर से हस्ताक्षरित किया गया और इसके कारण Google लॉगिन विफल हो गया। मुझे सीधे PlayStore से एपीके डाउनलोड करना था और Google क्लाउड कंसोल में इसे पंजीकृत करने के लिए वास्तविक SHA1 ढूंढना था।
एल्विन रुसली

333

आप keytoolकिसी भी फाइल को निकाले बिना किस्टोर या एपीके के हस्ताक्षर की जांच करने के लिए जावा 7 की कुंजी और प्रमाणपत्र प्रबंधन उपकरण का उपयोग कर सकते हैं ।

एक एपीके का हस्ताक्षर

keytool -printcert -jarfile app.apk

आउटपुट, हस्ताक्षर स्वामी / जारीकर्ता और MD5, SHA1 और SHA256 APK फ़ाइल के फ़िंगरप्रिंट को प्रकट करेगा app.apk

(ध्यान दें कि -jarfileतर्क 7 जावा में पेश किया गया था; अधिक जानकारी के लिए दस्तावेज देखें।)

एक कीस्टोर का हस्ताक्षर

keytool -list -v -keystore release.jks

आउटपुट काइस्टोर फ़ाइल में उपनामों (प्रविष्टियों) release.jksको प्रमाणपत्र फ़िंगरप्रिंट (MD5, SHA1 और SHA256) के साथ प्रकट करेगा ।

यदि एपीके और कीस्टोर मैच के बीच SHA1 फिंगरप्रिंट्स हैं, तो आप निश्चिंत हो सकते हैं कि उस ऐप को कुंजी के साथ साइन किया गया है।


1
@goRGon क्या आप जावा 7 या बाद में उपयोग कर रहे हैं?
पॉल लामर्ट्समा

2
@goRGon वास्तव में, -jarfileतर्क को जावा 7 के साथ पेश किया गया था। मैंने जवाब अपडेट कर दिया है।
पॉल लामार्ट्समा

41
यह एक स्वीकृत उत्तर होना चाहिए।
अनज़िपिंग की

1
यह अजीब है कि मैक पर अभी भी जावा 1.6 डिफ़ॉल्ट रूप से शिप किया गया है। मैं अधिक हाल के संस्करण में अपडेट करने की सलाह दूंगा।
पॉल लामर्ट्स्मा

2
@ रीचर्डब्रोनोस्की वास्तव में यह सच नहीं है। मैं iOS देव के बिना तीन साल से अधिक समय तक एक एंड्रॉइड डेवलपर रहा हूं। हालाँकि, मैं विभिन्न कारणों से आपके मुख्य बिंदु से सहमत हूँ। जावा 1.6 अब तक का सबसे विस्तारित संस्करण लगता है, या कम से कम व्यापक रूप से, और स्वीकृत समाधान 1.6 और 1.7 दोनों के साथ काम करता है, यह केवल 1.7 के साथ काम करेगा, इसलिए मुझे नहीं लगता कि यह स्वीकृत उत्तर होना चाहिए ( अभी तक!)। (यह भी ध्यान दें कि स्वीकृत उत्तर फॉर्म 2012 है, जबकि यह अप्रैल, 2014 से है)
फ्रेंक मारजोआ

17

पॉल लामर्ट्स्मा के उत्तर पर निर्माण करने के लिए, यह कमांड वर्तमान डीआईआर में सभी एपीके के नाम और हस्ताक्षर मुद्रित करेगा (मैं श का उपयोग कर रहा हूं क्योंकि बाद में मुझे आउटपुट को grep करने की आवश्यकता है):

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 को मान्य करने के लिए इसका उपयोग कर रहे हैं?
पॉल लामर्ट्स्मा

@PaLLammertsma हां, हम हैं।
आर्टेम रसाकोवस्की

11

हस्ताक्षर प्रमाण पत्र देखने का बहुत आसान तरीका:

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

यह केवल डीएन दिखाएगा, इसलिए यदि आपके पास एक ही डीएन के साथ दो सिरे हैं, तो आपको फिंगरप्रिंट द्वारा तुलना करना पड़ सकता है।


DN क्या है? अधिकतर मुझे इस तरह कई लाइनें मिलीं: X.509, CN = {firstname और lastname} [प्रमाण पत्र {दिनांक से} से {date_to}] तक मान्य है
xliiv

DN का अर्थ 'प्रतिष्ठित नाम' है, आपके मामले में यह 'CN = {firstname और lastname}' भाग है।
बजे निकोले एलेनकोव जूल

6

प्रमाणपत्रों और कुंजी स्टोरों की जांच करने के लिए कई फ़्रीवेयर हैं जैसे कि कीस्टोर एक्सप्लोरर

Apk को अनज़िप करें और META-INF /? RSA फ़ाइल खोलें। ? CERT या ANDROID हो सकता है या कुछ और हो सकता है। यह आपके एपीके से जुड़ी सभी जानकारी प्रदर्शित करेगा।


4

आप इसे उस apksignerटूल से कर सकते हैं जो Android SDK का हिस्सा है:

apksigner verify --print-certs my_app.apk

आप बिल्ड-टूल्स डायरेक्टरी के अंदर एस्काइनर पा सकते हैं। उदाहरण के लिए: ~/Library/Android/sdk/build-tools/29.0.1/apksigner

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.