मै मैक कीचेन में प्रमाणपत्र का उपयोग करके जावा एप्लेट पर कैसे हस्ताक्षर करूं?


16

मेरे पास मैक कीचेन में केवल कोड हस्ताक्षर एक्सटेंशन (कोई अन्य एक्सटेंशन नहीं) के साथ एक स्व-हस्ताक्षरित रूट प्रमाणपत्र है; मैं ऐप्पल के कोडइन टूल का उपयोग करके ∞labs से बाहर आने वाले सभी कोड पर हस्ताक्षर करने के लिए इसका उपयोग करता हूं और यह बहुत अच्छा काम करता है।

मैं अपने आप को थोड़ा विस्तार और कुछ जावा विकास करने की तलाश में था। मैं जानता हूँ कि एप्पल एक KeyStore कार्यान्वयन कि कीचेन से पढ़ता है प्रदान करता है, और मैं 'के साथ श्रृंखला में सभी प्रमाण पत्र मेरे पास सूचीबद्ध कर सकते हैं:

keytool -list -provider com.apple.crypto.provider.Apple -storetype KeychainStore -keystore NONE -v 

हालांकि, जब भी मैं एक साधारण परीक्षण JAR फ़ाइल पर हस्ताक्षर करने के jarsigner इस्तेमाल करने की कोशिश, मैं इसके साथ समाप्त होता हूं:

$ jarsigner -keystore NONE -storetype KeychainStore -providerName Apple a.jar infinitelabs_codesigning_2 
Enter Passphrase for keystore: <omitted> 
jarsigner: Certificate chain not found for: infinitelabs_codesigning_2. infinitelabs_codesigning_2 must reference a valid KeyStore key entry containing a private key and corresponding public key certificate chain. 

मैं क्या गलत कर रहा हूं?

(प्रमाणपत्र को निम्न Apple's instructions for obtaining a signing identity बनाया गया था।)

1

मुझे लगता है कि अपना कुंजी प्रविष्टि उर्फ ​​गलत होना चाहिए। क्या आप "keyEntry" के एंट्री प्रकार के साथ एक कीस्टोर ऑब्जेक्ट के उपनाम नाम का उपयोग कर रहे हैं? वही आदेश मेरे लिए पूरी तरह से काम करता है।

jarsigner आदमी पृष्ठ से

:

jarsigner का उपयोग करते समय एक जार फ़ाइल पर हस्ताक्षर करने के लिए, आप निजी कुंजी हस्ताक्षर उत्पन्न करने के लिए आवश्यक युक्त कुंजीस्टोर प्रवेश के लिए अन्य नाम निर्दिष्ट करना होगा।

  0

कीस्टोर एंट्री उपनाम सही है, अगर यह पहली कीटोल -लिस्ट कमांड द्वारा प्रदर्शित किया गया है और कुछ और नहीं जिसे मुझे पता नहीं है। 27 sep. 082008-09-27 09:23:01


0

आप सेब कीचेन से कुंजी निर्यात और Keytool के माध्यम से इसे आयात करने की कोशिश की है? शायद ऐप्पल ने अपने कीचेन के साथ कीटोल को सही ढंग से एकीकृत नहीं किया है (ऐसा नहीं है कि उनके पास जावा का समर्थन करने वाला तारकीय ट्रैक रिकॉर्ड है)।

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

हम्म ... मैं सिर्फ एक महत्वपूर्ण यह है कि जावा की दुकान है कि मैं सेब कीचेन में आयात से काम किया (एक निजी/सार्वजनिक कुंजी है) लेने की कोशिश की और यह काम नहीं करता। तो मेरा आयात गलत है, आप इस तरह से सेब कीचेन तक नहीं पहुंच सकते हैं, या कुछ और गलत हो रहा है :-)


0

मैं भी ऐसा करने की कोशिश कर रहा हूं। मैं कुछ contortions के माध्यम से चला गया और, Keystore एक्सप्लोरर और I lost my public key. Can I recover it from a private key? का उपयोग कर, मैं .keystore फ़ाइल से प्रमाणपत्र, निजी कुंजी, और सार्वजनिक कुंजी निकालने में सक्षम था और उन्हें एक ओएसएक्स keychain में ले जाया गया। ध्यान दें कि इस मामले में मुझे शायद सार्वजनिक कुंजी की आवश्यकता नहीं थी।

अगर मैं निजी कुंजी का नाम jarsigner देता हूं (जैसा कि उस कुंजी के आधार पर मेरे स्वयं हस्ताक्षरित प्रमाणपत्र के नाम के विपरीत है), तो मुझे आपके द्वारा उल्लिखित त्रुटि मिलती है।

मेरा अनुमान है तो यह आपकी समस्या निम्नलिखित

  • आपके कीचेन प्रमाणपत्र होता है, लेकिन नहीं निजी कुंजी
  • आपके कीचेन निजी कुंजी नहीं बल्कि प्रमाणपत्र
  • "infinitelabs_codesigning_2 शामिल में से एक है "प्रमाण

के बजाय निजी कुंजी को संदर्भित करता है, मैं आपकी jarsigner कमांड लाइन (धन्यवाद!) का उपयोग करने में सक्षम हूं और सही परिणाम प्राप्त करता हूं, जिसे मैंने जावा के साथ चेक किया rsigner -verify।