2011-11-25 13 views
5

तो मैं wsdls के साथ यहां कुछ समस्याएं चला रहा हूं और जावा में कई कर्टों का चयन कर रहा हूं। एक स्मार्टकार्ड, उदाहरण के लिए, हस्ताक्षर, एन्क्रिप्शन, पहचान के लिए, इसमें कई कर्ट हैं। मैं एक डबल्यूएसडीएल है कि ग्राहक प्रमाणन कनेक्शन के लिए कोड उत्पन्न करता है लेकिन जहाँ तक मैं बता सकता हूँ, आप wsdl संपत्ति की स्थापना द्वारा कुंजीस्टोर करने के लिए एक रास्ता देना है, यहडब्ल्यूएसडीएल क्लाइंट एथ और एकाधिक कर्ट

System.setProperty("javax.net.ssl.keyStore", 
    keyStore); 
    System.setProperty("javax.net.ssl.keyStorePassword", 
    keyStorePassword); 

की तरह मैं इस tutorial अनुसरण कर रहा हूँ । अब, एक स्मार्टस्टोर में एक कीस्टोर में एकाधिक कैर्ट्स के लिए, यह एक समस्या प्रस्तुत करता है क्योंकि निर्दिष्ट करने का कोई तरीका नहीं है कि आप उस स्मार्टकार्ड पर किस प्रमाणपत्र का उपयोग करना चाहते हैं। ऐसा लगता है कि wsdl कुंजीस्टोर में पहला प्रमाणपत्र चुनता है, जो प्रमाणित करने के लिए गलत प्रमाण पत्र हो सकता है।

मेरा प्रश्न है 2 गुना:

  1. वहाँ एक रास्ता एक System.setProperty कर wsdl जो प्रमाण पत्र का उपयोग करने के बताने के लिए अन्य की तुलना में है? wsconsume का उपयोग करते हुए wsdl द्वारा अधिकांश कोड जेनरेट किए जाने के बाद से मैं कौन सा प्रमाणपत्र निर्दिष्ट करने के लिए क्या कर सकता हूं?

  2. System.setProperty() केवल आपको एक पथ निर्दिष्ट करने की अनुमति देता है। क्या ऑब्जेक्ट निर्दिष्ट करने का कोई तरीका है? जिस तरह से मुझे स्मार्टकार्ड से प्रमाण पत्र मिल रहे हैं, वह SunPKCS11 क्लास का उपयोग कर रहा है (जैसा कि here मिला है)। हालांकि, यह मुझे एक कीस्टोर ऑब्जेक्ट देता है, और जहां तक ​​मुझे पता है कि System.setProperty() पथ चाहता है।

आपकी मदद के लिए धन्यवाद!

उत्तर

1

मुझे अंत में मेरे प्रश्न का उत्तर मिला। ध्यान रखें मैं सीएक्सएफ का उपयोग कर रहा हूँ।

तो जब मैं wsdl2java को wsdl पर कॉल करता हूं, तो मुझे जेनरेट कोड का एक गुच्छा मिलता है। विशेष रूप से दो टुकड़े हैं जो प्रमाणीकरण को प्राधिकृतकरण प्राधिकरण और प्राधिकरण सेवा नामक संभालते हैं। मेरे कोड में, आदेश इन कड़ियों को फोन करने में, मैं निम्नलिखित है

AuthorizationService authSvc = new AuthorizationService(); 
Authorization authWs = authSvc.getAuthorizationPort(); 

इस बिंदु पर, तुम्हें चुना प्रमाण पत्र से एक नया कुंजीस्टोर बनाकर स्वयं अपने keyManager और trustmanager का निर्माण करने की आवश्यकता होगी। एक अच्छी जगह शुरू करने के लिए this

तो फिर तुम फिर अपने HTTPConduit बनाने TLSClientParameters

TLSClientParameters params = new TLSClientParameters(); 
params.setKeyManagers(keyManagers); 
params.setTrustManagers(trustManagers); 

का निर्माण करने की जरूरत है।

HTTPConduit conduit = (HTTPConduit) ClientProxy.getClient(authWs).getConduit(); 
conduit.setTlsClientParameters(params); 

और फिर आप अपने वेब सेवा का उपयोग उस प्रमाणपत्र के साथ कर सकते हैं जो आपके उपयोगकर्ता ने चुना है।

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