2010-11-23 18 views
7

मैं अपाचे सीएक्सएफ और डब्ल्यूएसएस 4 जे का उपयोग कर webservice अनुरोधों पर हस्ताक्षर करना चाहता हूं। जहां तक ​​मुझे पता है, मुझे एक जेकेएस स्टोर की आवश्यकता होगी जिसमें प्रमाणपत्र है जिसे मैं हस्ताक्षर करने के लिए उपयोग करना चाहता हूं। विंडोज प्रमाणपत्र स्टोर से X.50 9 प्रमाणपत्र का उपयोग करने में सक्षम होने की आवश्यकता है। Webservice अनुरोध पर हस्ताक्षर करने के समय प्रमाणपत्र को स्टोर से पढ़ा जाएगा। मुझे पता है कि दुकान का उपयोग कैसे करें और प्रमाणपत्र प्राप्त करें। लेकिन मैं अपने स्वयं के जेकेएस स्टोर से प्रमाण पत्र की बजाय हस्ताक्षर करने के लिए इसका उपयोग कैसे कर सकता हूं?वेबसाइट सुरक्षा और विंडोज प्रमाण पत्र

+0

हस्ताक्षर करने के लिए प्रमाणपत्र का उपयोग नहीं किया जाता है, कुंजी हैं। क्या आपके पास निजी कुंजी तक पहुंच है? इस मामले में आप वास्तव में कुछ हस्ताक्षर कर सकते हैं। –

उत्तर

1

कीस्टोर को जेकेएस एक नहीं होना चाहिए। आप अपना खुद का जेसीए प्रदाता लिख ​​सकते हैं और KeyStoreSpi को लागू कर सकते हैं, और इसे विंडोज प्रमाणपत्र स्टोर तक पहुंच सकते हैं।

+0

क्या आपको मेरा उत्तर उपयोगी मिला? – adrianboimvaser

0

this पर देखें जो विंडोज कुंजीस्टोर का उपयोग करने के तरीके को बताता है। फिर आपको उस कीस्टोर का उपयोग करने के लिए सीएक्सएफ को कॉन्फ़िगर करना होगा।

+0

मैं उस स्टोर का उपयोग करने के लिए सीएक्सएफ कैसे बता सकता हूं? – tobiasbayer

+0

ऐसा करने का कोई अच्छा तरीका प्रतीत नहीं होता है। जावा-कॉम ब्रिज का उपयोग करने के लिए यहां एक सुझाव दिया गया है: http://objectmix.com/java/76948-accessing-certificates-windows-system-stores-java.html। यह उत्तर बताता है कि आप जेएनआई नरक में फंस जाएंगे: https://lists.owasp.org/pipermail/owasp-webscarab/2010- अक्टूबर /001123.html – rtperson

+0

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

0

बस MerlinDevice कक्षा का उपयोग करके हासिल करना संभव है। कि कैसे अपनी किया है:

1) WSS4JOutInterceptor के लिए विन्यास गुण:

Map<String,Object> outProps = new HashMap<String,Object>(); 
outProps.put(WSHandlerConstants.ACTION, "Signature"); 
outProps.put(WSHandlerConstants.USER, "Friendly_name_of_your_certificate"); 
outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS, StupidCallback.class.getName()); 
outProps.put(WSHandlerConstants.SIG_PROP_FILE, "client_sign.properties"); 
WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); 

2) client_sign.properties फ़ाइल इस तरह दिखता है:

org.apache.ws.security.crypto.provider=org.apache.wss4j.common.crypto.MerlinDevice 
keystore.provider=SunMSCAPI 
cert.provider=SunMSCAPI 
keystore.type=Windows-MY 
truststore.type=Windows-ROOT 

3) और StupidCallback सिर्फ एक के रूप में निरंतर स्ट्रिंग रिटर्न पासवर्ड (इसका मूल्य वास्तव में कोई फर्क नहीं पड़ता):

public class StupidCallback implements CallbackHandler 
{ 
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException 
    { 
     WSPasswordCallback pc = (WSPasswordCallback) callbacks[0]; 
     pc.setPassword("password"); 
    } 
} 

यह सब कुछ है।

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