2010-10-20 4 views
2

J'utilise le code généré par CXF pour me connecter à un service Web distant via SSL et via un proxy d'entreprise. Le code fonctionne correctement lorsque la connexion est établie via l'API Java et que tous les paramètres SSL sont définis en tant que propriétés système comme suit.Pourquoi j'obtiens une erreur bad_certificate lors de l'utilisation de Spring et CXF

System.setProperties("https.proxyHost", "myproxy.com"); 
System.setProperties("https.proxyPort", "8001"); 
System.setProperties("javax.net.ssl.keyStoreType", "pkcs12"); 
System.setProperties("javax.net.ssl.keyStore", "C:/keystore.p12"); 
System.setProperties("javax.net.ssl.keyStorePassword", "keypassword"); 
System.setProperties("javax.net.ssl.trustStore", "C:/cacerts"); 
System.setProperties("javax.net.ssl.trustStorePassword", "capassword"); 

MyWebService_Service ss = new MyWebService_Service(wsdlUrl, SERVICE_NAME); 
MyWebService service = ss.getMyWebServicePort(); 

En utilisant ce code je peux maintenant appeler les méthodes de service et tout fonctionne comme prévu. Mes problèmes surviennent lorsque j'essaie de configurer la même configuration avec Spring, ce qui est notre approche préférée, car nous utilisons déjà Spring de manière extensive.

Ma config de printemps:

<!-- relevant snippet from spring context --> 

<import resource="classpath:META-INF/cxf/cxf.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-extension-http.xml" /> 

<jaxws:client id="webservice" serviceName="myns:MyWebService" endpointName="myns:MyWebServicePort" 
    address="https://bigserver.com:5012/blah/TheWebService" 
    serviceClass="com.mycomp.MyWebService" /> 

<http:conduit name="{myns}MyWebServicePort.http-conduit"> 
    <http:tlsClientParamenters disableCNCheck="true" secureSocketProtocol="TLS"> 
     <sec:trustManagers> 
     <sec:keyStore type="JKS" password="capassword" file="c:/cacerts" /> 
     </sec:trustmanagers> 
     <sec:keyManagers> 
     <sec:keyStore type="pkcs12" password="keypassword" file="c:/keystore.p12" /> 
     </sec:keyManagers> 
    </http:tlsClientParamenters> 
    <http:client ProxyServer="myproxy.com" ProxyServerPort="8001" /> 
</http:conduit> 

Dans les deux cas, le client de service Web est déployé dans une application Web. Dans le second cas, l'accès au service Web se traduit par un

Editer: J'utilise CXF version 2.2.

Répondre

0

Avez-vous essayé d'ajouter la propriété suivante à vos paramètres client?

**useHttpsURLConnectionDefaultHostnameVerifier="false"** 

ressemble à ceci:

Questions connexes