2009-02-12 9 views
7

मैं एक प्रमाणपत्र द्वारा सुरक्षित एक वेब सेवा तक पहुंचने का प्रयास कर रहा हूं। आईआईएस पर सुरक्षा स्थापित है और वेब सेवा इसके पीछे है।आप एक सीएक्सएफ क्लाइंट के साथ एक वेब सेवा के लिए टीएलएस/एसएसएल एचटीपी प्रमाणीकरण का उपयोग कैसे करते हैं?

मुझे नहीं लगता कि डब्ल्यूएस-सुरक्षा इस प्रकार के प्रमाणीकरण को करेगी। क्या आप वेब सेवा कॉल करते समय क्लाइंट प्रमाणपत्र पास करने का कोई तरीका है?

मुझे बस एक आईआईएस त्रुटि पृष्ठ मिल रहा है जो कहता है "पृष्ठ को क्लाइंट प्रमाणपत्र की आवश्यकता है"।

मैं CXF 2.1.4

उत्तर

7

हाँ, यह CXF का उपयोग कर संभव है उपयोग कर रहा हूँ। आपको क्लाइंट कंड्यूट सेट अप करने की आवश्यकता होगी। आप उस कुंजीस्टोर को निर्दिष्ट कर सकते हैं जिसमें प्रमाण पत्र शामिल हैं जो आपको आईआईएस में वेब सेवा तक पहुंचने की अनुमति देगा। जब तक आप यहां उपयोग कर रहे प्रमाणपत्र को आईआईएस में एक ज्ञात अनुमत ग्राहक है, तो आपको ठीक होना चाहिए।

<http:conduit name="{http://apache.org/hello_world}HelloWorld.http-conduit"> 

    <http:tlsClientParameters> 
     <sec:keyManagers keyPassword="password"> 
      <sec:keyStore type="JKS" password="password" 
       file="src/test/java/org/apache/cxf/systest/http/resources/Morpit.jks"/> 
     </sec:keyManagers> 
     <sec:trustManagers> 
      <sec:keyStore type="JKS" password="password" 
       file="src/test/java/org/apache/cxf/systest/http/resources/Truststore.jks"/> 
     </sec:trustManagers> 

     ... 

    </http:tlsClientParameters> 

नमूना से: CXF Wiki

1

जवाब से ऊपर सही, लेकिन उस में जोड़ने से है ....

आपका क्लाइंट सेम निम्नलिखित (इस एसएसएल ठीक काम कर रहा के लिए) के रूप में किया जाना चाहिए:

<jaxws:client id="helloClient" serviceClass="demo.spring.HelloWorld" address="http://localhost:9002/HelloWorld" /> 

यदि आप क्लाइंट बीन को निम्नलिखित एसएसएल के रूप में परिभाषित करते हैं तो काम नहीं करेगा:

<bean id="proxyFactory" 
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
<property name="serviceClass" value="demo.spring.HelloWorld"/> 
<property name="address" value="http://localhost:9002/HelloWorld"/> 
</bean> 
0

प्रोग्रामेटिक रूप से ऐसा करने के लिए, एक इंटरसेप्टर बनाएं और factory.getOutInterceptors().add(new TLSInterceptor()) के साथ इसे अपने JaxWsProxyFactoryBean में जोड़ें।

public class TLSInterceptor extends AbstractPhaseInterceptor<Message> { 

    public TLSInterceptor() { 
     super(Phase.SETUP); 
    } 

    @Override 
    public void handleMessage(final Message message) throws Fault { 
      final Conduit conduit = message.getExchange().getConduit(message); 
      if (conduit instanceof HTTPConduit) { 
       final HTTPConduit httpConduit = (HTTPConduit) conduit; 
       final TLSClientParameters tlsClientParameters = ObjectUtils.firstNonNull(httpConduit.getTlsClientParameters(), new TLSClientParameters()); 

       // configure the params 

       httpConduit.setTlsClientParameters(tlsClientParameters); 
      } 
     } 
} 
संबंधित मुद्दे

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