2010-10-20 2 views
2

Я использую CXF сгенерированный код для подключения к удаленной веб-службе через SSL и через корпоративный прокси. Код работает нормально, когда соединение установлено через API Java, и все настройки SSL устанавливаются как системные свойства следующим образом.Почему я получаю ошибку bad_certificate при использовании Spring и 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(); 

Используя этот код, я теперь могу назвать методы обслуживания, и все работает так, как ожидалось. Мои проблемы возникают, когда я пытаюсь настроить ту же конфигурацию с помощью Spring, что является нашим предпочтительным подходом, поскольку мы уже активно используем Spring.

Моя весна конфигурации:

<!-- 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> 

В обоих случаях клиент развертывание веб-службы в веб-приложение. Во втором случае, доступ к результатам веб-службы в

javax.net.ssl.SSLHandshakeException: Received fatal alert: bad_certificate 

Edit: Я использую CXF версии 2.2.

ответ

0

Вы пытались добавить следующее свойство к своим параметрам клиента?

**useHttpsURLConnectionDefaultHostnameVerifier="false"** 

выглядит так:

Смежные вопросы