2012-12-26 23 views
7

में मिली कुंजियों का उपयोग करके सिस्टम के रूप में एक एपीके पर हस्ताक्षर करना शीर्षक के अनुसार, मैं platform.x509.pem और platform.pk8 का उपयोग करके अपने ऐप पर हस्ताक्षर करने की कोशिश कर रहा हूं।स्रोत/निर्माण/लक्ष्य/उत्पाद/सुरक्षा/

keytool-importkeypair -k ~/.android/debug.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform 


और मैं भी कोई त्रुटि मिलती है जब सीधे APK SignApk.jar का उपयोग कर इस तरह प्रवेश करने का प्रयास:

समस्या यह है कि मैं त्रुटियों जब Keytool-importkeypairs का उपयोग कर इस तरह इन्हें जोड़ने के लिए मिलता है
java -jar SignApk.jar platform.x509.pem platform.pk8 test-app.apk test-app-signed.apk 


Keytool-importkeypairs त्रुटि:

Error decrypting key 
3074042056:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319: 
3074042056:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO 
unable to load private key 
3074091208:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: ANY PRIVATE KEY 
Importing "platform" with unable to load certificate 
3073755336:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:696:Expecting: TRUSTED CERTIFICATE 
keytool error: java.lang.Exception: Source keystore file exists, but is empty: /tmp/keytool-importkeypair.vDOP/p12 


स्रोत प्रयुक्त: Apk with system privileges, How to sign Android app with system signature? (SO), और How to update the android dev phone 2 from 1.6 to 2.1
ऊपर दिए गए लिंक में वर्णित विधियों में से कोई भी अब काम नहीं कर सकता है। अग्रिम धन्यवाद।

+0

आपको सिस्टम विशेषाधिकारों की आवश्यकता क्यों है? – 0909EM

+0

मैं एक ऐप बना रहा हूं जिसके लिए [PowerManager] (http://developer.android.com/reference/android/os/PowerManager.html#reboot (java.lang) से "रीबूट" कमांड तक पहुंच की आवश्यकता है।स्ट्रिंग)) विशेष रूप से बूट पर परीक्षणों की एक श्रृंखला चलाने के लिए और यह निर्धारित करें कि फोन का एक विशिष्ट ब्रांड रूट किया जा सकता है, और यदि यह हो सकता है, तो इस फोन के मालिक कंप्यूटर-साइड यूटिलिटी (मेरे द्वारा निर्मित) का उपयोग कर सकते हैं ऐसा करो। – cnexus

+0

@ 9090EM स्पष्ट रूप से यह ऐप Play Store पर वितरित नहीं किया जाएगा, लेकिन मुझे एक्सडीए पर प्रतिष्ठा है, इसलिए इसका उपयोग करने वाले लोग यह जान लेंगे कि वे क्या कर रहे हैं, और मैं उनके सिस्टम के लिए कुछ भी हानिकारक नहीं करता। – cnexus

उत्तर

12

पहले फ़ाइलों के प्रारूप की जांच करें (cat, आदि के साथ), त्रुटि से पता चलता है कि वे अपेक्षित प्रारूप (ASN.1/PEM) में नहीं हैं।

अधिक महत्वपूर्ण बात यह है कि उन चाबियों का उपयोग शायद ही कभी कोई समझ में आता है। वे सिर्फ नमूना कुंजी हैं, और कोई भी आत्म-सम्मानित कस्टम रोम अपने निजी कुंजी का उपयोग करेगा। अन्यथा कोई भी एओएसपी में सार्वजनिक कुंजी के साथ अपने एपीके पर हस्ताक्षर कर सकता है और वे जो भी विशेषाधिकार चाहते हैं उसे प्राप्त कर सकते हैं। जो कहने की जरूरत नहीं है, बहुत बुरी चीज। यदि आपको ऐसे सिस्टम को विकसित करने की आवश्यकता है जो सिस्टम विशेषाधिकारों का उपयोग करता है और इसे सभी (या अधिकतर) रूट किए गए फ़ोन और कस्टम रोम पर काम करना चाहता है, तो ऐसा करने का सही तरीका su के साथ रूट पहुंच का अनुरोध करना है और जो कुछ भी आपको करने की आवश्यकता है उसे निष्पादित करना है रूट खोल यदि उपयोगकर्ता आपको अनुमति देता है, निश्चित रूप से।

संपादित करें:

आयात त्रुटि डिबग करने के लिए, कदम से इस कदम को चलाते हैं। यह डिफ़ॉल्ट एओएसपी कुंजी के साथ काम करता है।

$ openssl pkcs8 -inform DER -nocrypt -in platform.pk8 -out platform.pem 
$ openssl pkcs12 -export -in platform.x509.pem -inkey platform.pem -out platform.p12 -password pass:android -name platform 
$ keytool -importkeystore -deststorepass android -destkeystore test.keystore -srckeystore platform.p12 -srcstoretype PKCS12 -srcstorepass android 
$ keytool -list -v -keystore test.keystore 

यह क्या करता है:

  1. पीईएम को PKCS # 8 प्रारूप द्विआधारी कुंजी में कनवर्ट करता है (openssl pkcs8)
  2. एक PKCS # 12 फ़ाइल है कि दोनों निजी कुंजी और शामिल बनाता है प्रमाणपत्र (openssl pkcs12)
  3. चूंकि जावा के keytool केकेस्टोर के रूप में पीकेसीएस # 12 फाइलें पढ़ सकते हैं, यह आपके पीकेसीएस # 12 फाइल को ई में आयात करता है इसे सक्रिय रूप से देशी प्रारूप (बीकेएस या जेकेएस) में परिवर्तित करें (keytool -importkeystore)
  4. (बोनस) सब कुछ काम करने के लिए सामग्री सूचीबद्ध करने के लिए keytool का उपयोग करता है। (keytool -list)
+0

हां, मुझे एहसास है कि मैं "su" के साथ पहुंच का अनुरोध कर सकता हूं, लेकिन मुद्दा यह है कि इस ऐप को चलाने वाले डिवाइस में रूट विशेषाधिकार नहीं होंगे। निर्माता हस्ताक्षर कुंजी प्राप्त करने का कोई तरीका है? दुर्भाग्यवश ऐसा लगता है कि ऐसा नहीं है। – cnexus

+1

बेशक निर्माता कुंजी सीधे प्राप्त करने का कोई तरीका नहीं है। हालांकि आप अपने ऐप को अपने प्रबंधक द्वारा रोम में शामिल कर सकते हैं। साथ ही, 'रूट ऐप' का पूरा बिंदु यह है कि वे केवल * पहले से ही * रूट डिवाइस पर काम करते हैं। –

+0

आपकी वास्तविक त्रुटि के लिए, मुख्य फाइलें कैसी दिखती हैं? क्या आपने जांच की। –