2013-07-09 2 views
3

좋은 시간!Weblogic이 CXF의 SSL 구성을 삭제합니까?

저는 SSL로 보호 된 원격 서비스와 통신하기 위해 간단한 CXF 클라이언트를 만들었습니다. JUnit 테스트를 실행하면 실수없이 핸드 셰이크가 수행되고 통신은 정상적으로 진행됩니다.

나는 웹 로직 서버 (11g)에 내 응용 프로그램을 배포하고 요청을 수행하는 경우

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

는, 핸드 쉐이크는 "요청 대상에 유효한 인증 경로를 찾을 수 없습니다"라는 오류와 함께 실패합니다. "-Djavax.net.debug = all"이 얻은 로그에 따르면 Weblogic은 구성된 CXF 클라이언트의 truststore를 무시하고 Java cacert (/ jre/lib/security)를 얻습니다.

나는 웹 로직-application.xml을에서 선 <package-name>javax.jws.*</package-name>를 작성하려고했지만,이 오류 "org.springframework.beans.MethodInvocationException하여 응용 프로그램을 죽이고 : 부동산의 'serviceClass는'예외를 던져; 중첩 된 예외는 자바이다. lang.NoClassDefFoundError : javax/jws/WebService "를 참조하십시오.

성직자 - 서버 통신에 참여하지 않기를 weblogic에 알리는 방법을 제안 해 줄 수 있습니까?

편집.

<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"/> 

편집이 전체 클라이언트 구성 (스프링 CXF)입니다. this post에 따라 <http:conduit name="<service_namespace_port>.http-conduit"><http:conduit name="*.http-conduit"> 으로 변경했습니다. 이제 "중첩 예외는 java.lang.RuntimeException : 보안 XMLInputFactory를 만들 수 없습니다."라는 오류 메시지가 나타납니다. 얼마 전이 오류가 발생했고 발견 한 해결책은 using the system property입니다. 그러나 그것은 더 이상 적합하지 않습니다 ... 아무도, 이것을 해결하는 방법을 알고 있습니까?

+0

Apache CXF 웹 사이트에서 weblogic의 특정 서버 구성을 확인 했습니까? http://cxf.apache.org/docs/application-server-specific-configuration-guide.html –

+0

예, 질문에서 썼 듯이이 구성은 배포를 중지합니다. "javax.jws. *"줄이있는 단락을 참조하십시오. 이 문제를 해결하는 방법을 알고 계십니까? – Dmitry

+0

Weblogic이 EAR/WAR에서'javax.jws. *'패키지를 선호한다고 말하면서 JAX-WS 라이브러리를 어플리케이션에 포함 시켰습니까? –

답변

3

마지막으로 두 가지 문제에 대한 해결책을 제시했습니다.

우선, 정말 도움이되는 대답에 대해 Cristian Meneses에게 감사드립니다.

다음은 "안전한 XMLInputFactory를 만들 수 없습니다"문제 해결책에 대한 대답은 this post입니다.그리고 그 후에 http:conduit이름이 인 경우 this post을 확인하십시오. (제 경우에는 그러한 구성을 사용했습니다 : <http:conduit name="*.http-conduit">). 이 정보를 믹스하여 응용 프로그램 작업을 관리했습니다.

기본 아이디어은 구성된 CXF의 클라이언트 키 저장소를 사용하는 도관 이름과 WLS가 일치 할 때 사용되지만 그렇지 않은 경우 cacerts를 사용합니다. 불가사의에 대한

힌트 : 정말 필요 (그러나 권장)되지는 HTTP 이름을 지정합니다 : 도관 콩을가 공식 문서에 말했듯이 (내 목표는 서비스 엔드 포인트를 구성 할 수 있도록했다). http : conduit bean 이름은 연결하려는 서비스 이름과 일치하는 템플릿입니다. 제발, ticket에 referer. Jason Pell이 제공하는 큰 해결 방법이 있습니다.

0

종속성이 누락 된 것 같습니다. geronimo-ws-metadata_2.0* (CXF 버전에 맞는 특정 버전을 모릅니다). 메이븐 중앙에 또한

이 종속성

그런데

당신이 <package-name>javax.jws.*</package-name>를 계속 사용하는 경우,이 geronimo-ws-metadata_2.0*부터 적용 ... 메이븐 당신을 위해이를 포함시키지 않은 이유는 아마도 그건 단지 cxf-buldle에 적용 할 것 누락 된 인터페이스를 포함

==================================

이 내 설정이다 도관을 작동 시키려면

<!-- OVERRIDE DEFAULT TRUSTSTORE, USE BUNDLE TRUSTSTORE INSTEAD --> 
<http:conduit name="{http://myWebserviceNamespace/}myWebservicePort.http-conduit"> 
    <http:tlsClientParameters> 
     <sec:trustManagers> 
      <sec:keyStore type="JKS" password="myPass" 
       resource="myTrustStore.jks" /> 
      </sec:trustManagers> 
    </http:tlsClientParameters> 
</http:conduit>  

<jaxws:client id="myClient" 
     serviceClass="com.example.webservice.MyService" 
     address="https://path.to/MYSERVICE/services/MyWebservice"/> 

내 truststore가 classpath에 있었기 때문에 "file"대신 "resource"를 사용해야했습니다.

+0

죄송합니다. 배포 프로세스에 시간이 걸렸습니다. 이 솔루션은 스프링 구성 ("javax.jws. *"문제)을 수정했지만 주요 문제를 해결하지 못했습니다. Weblogic은 이전에 jdk1.6.0_45 \ jre \ lib \ security \ cacerts를 사용합니다. – Dmitry

+0

웹 서비스 클라이언트가 정의 된 스프링 컨텍스트를 게시 할 수 있습니까? 며칠 전 Websphere App Server에서이 작업에 어려움을 겪었습니다. 아마도이 문제를 해결하는 데 도움이 될 것입니다. "주된 문제"로 인해 'jre/lib/sercurity/cacerts' 트러스트 스토어를 계속 사용하고 있습니까? –

+0

제발, 편집을 참조하십시오. 주요 문제는 Weblogic이 CXF의 구성을 없애는 것입니다. – Dmitry