Хорошее время!
Я создал простой клиент CXF для связи с удаленной службой, защищенной SSL. Если я запускаю тест JUnit, рукопожатие выполняется без ошибок, и связь проходит нормально.
<http:conduit name="<service_namespace_port>.http-conduit">
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
<http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
<sec:keyManagers keyPassword="pass">
<sec:keyStore type="JKS" password="pass" file="keystore"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="pass" file="truststore"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
If I deploy my application on a Weblogic Server (11g) and perform a request, the handshake fails with the error "unable to find valid certification path to requested target". According to the logs got by the "-Djavax.net.debug=all", the problem is Weblogic gets its java cacert (/jre/lib/security) ignoring the configured CXF client's truststore.
Я пытался написать строку <package-name>javax.jws.*</package-name>
в файле weblogic-application.xml, но это убивает приложение с ошибкой "org.springframework.beans.MethodInvocationException: свойство 'serviceClass' вызвало исключение; вложенным исключением является java.lang.NoClassDefFoundError: javax/jws/веб-сервис".
Может кто-нибудь, пожалуйста, подскажите, как запретить weblogic участвовать в обмене сообщениями clent-сервер?
ИЗМЕНИТЬ. Это полная конфигурация клиента (Spring-CXF):
<http:conduit name="<service_namespace_port>.http-conduit">
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
<http:tlsClientParameters secureSocketProtocol="SSL" disableCNCheck="true">
<sec:keyManagers keyPassword="pass">
<sec:keyStore type="JKS" password="pass" file="keystore"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="pass" file="truststore"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
</http:conduit>
<jaxws:client id="service"
serviceClass="foo.bar.ServiceClass"
address="<service_url>" />
<bean id="client" class="foo.bar.ClientClass"/>
ИЗМЕНИТЬ. Согласно этому сообщению, я изменил <http:conduit name="<service_namespace_port>.http-conduit">
на <http:conduit name="*.http-conduit">
, и теперь я получаю сообщение об ошибке "вложенное исключение java.lang.RuntimeException: невозможно создать безопасный XMLInputFactory". Некоторое время назад у меня была эта ошибка, и решение, которое я нашел, это с использованием системное свойство. Но больше не подходит... Кто-нибудь знает, как это исправить?
javax.jws.*
packages в вашем EAR/WAR, у вас есть библиотеки JAX-WS, упакованные в ваше приложение? - person Cristian Meneses   schedule 09.07.2013