2009-01-30 16 views
6

मैं अपने आवेदन में Sun's MSCAPI provider का उपयोग करने में कामयाब रहा हूं। अब मेरी समस्या यह है कि यह हमेशा एक विंडो खोलता है, पासवर्ड मांगता है, भले ही मैंने इसे कोड में प्रदान किया हो। यह एक समस्या है, क्योंकि मुझे webservice में क्रिप्टोग्राफी कार्यक्षमता की आवश्यकता है।जावा सुरक्षा - एमएससीएपीआई प्रदाता: पासवर्ड पॉपअप के बिना कैसे उपयोग करें?

यहाँ कोड मैं अब है:

String alias = "Alias to my PK"; 
char[] pass = "MyPassword".toCharArray(); 

KeyStore ks = KeyStore.getInstance("Windows-MY"); 
ks.load(null, pass); 
Provider p = ks.getProvider(); 

Signature sig = Signature.getInstance("SHA1withRSA",p); 
PrivateKey key = (PrivateKey) ks.getKey(alias, pass) 

sig.initSign(key); 
sig.update("Testing".getBytes()); 
sig.sign(); 

यह महान काम कर रहा है, लेकिन मैं पासवर्ड मांगने जब अंतिम पंक्ति से चलाया जाता है एक पॉपअप मिलता है। मैं इसे कैसे रोकूं?

उत्तर

4

MSCAPI प्रदाता CAPI करने के लिए पासवर्ड प्रदान करने का समर्थन नहीं करता:

एक संगतता मोड अनुप्रयोगों मान लेते हैं कि एक पासवर्ड की आपूर्ति होगी लिए समर्थित है। यह एक गैर-शून्य पासवर्ड की अनुमति देता है (लेकिन अनदेखा करता है)। मोड डिफ़ॉल्ट रूप से सक्षम है। (1)

CAPI के माध्यम से पासवर्ड सेट करने के लिए आपको गैर-दस्तावेजी KP_KEYEXCHANGE_PIN या KP_SIGNATURE_PIN साथ CryptSetKeyParam फोन और अपने अंतर्निहित हार्डवेयर टोकन प्रदाता इसका समर्थन करता आशा करना होगा। (वे पूरी तरह से अनियंत्रित नहीं हैं - विंडोज सीई और विंडोज मोबाइल के लिए प्रलेखन उन्हें (2) का उल्लेख करते हैं और वे हेडर फाइलों में शामिल हैं)।

+0

मुझे पता है कि यह थोड़ा पुराना है, लेकिन मुझे वही चीज़ चाहिए। क्या आपके पास पिन पॉपअप से बचने के लिए इसे सेट करने का एक उदाहरण है? –

1

मेरा अनुमान है कि विंडोज पॉप अप पॉप अप कर रहा है।

प्रमाणपत्र आयात विज़ार्ड का उपयोग करके अपनी कुंजी फिर से आयात करें, लेकिन सुनिश्चित करें कि आप "पासवर्ड" स्क्रीन पर निम्न विकल्प नहीं देखते हैं।

[_] मजबूत निजी कुंजी सुरक्षा सक्षम करें। यदि आप इस विकल्प को सक्षम करते हैं तो आपको हर बार निजी कुंजी का उपयोग किसी एप्लिकेशन द्वारा किया जाएगा।

+0

आपके उत्तर के लिए धन्यवाद, लेकिन मैं प्रमाण पत्र दोबारा आयात नहीं कर सकता क्योंकि यह नहीं है एक फ़ाइल लेकिन एक हार्डवेयर टोकन जिसका मैं उपयोग कर रहा हूं। – Sietse

+0

मेरे पास जावा कोड में खाली पासवर्ड है। जब मैं पहली बार यूएसबी में टोकन डालता हूं और जावा एप्लिकेशन चलाता हूं, तो टोकन मिडलवेयर से पॉपअप विंडो प्रदर्शित होती है और निजी कुंजी एक्सेसिबल होती है। लेकिन जब मैं एप्लिकेशन को दूसरी और अधिक बार चलाता हूं, तो एप्लिकेशन फ्रीज होता है। मुझे फिर से टोकन को हटाना और डालना होगा। –

0

मैं इस समस्या के रूप में पालन प्रदाता की स्थापना का संकल्प:

signeData = gen.generate(content, ks.getProvider());

कहाँ

ks एक KeyStore और

gen है एक CMSSignedDataGenerator

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^