2010-02-28 3 views
0

WebLogic 10.3에서 WS-Security 기능을 사용하여 JAX WS 웹 서비스를 개발하려고합니다. ant 태스크 WSDLC, JWSC 및 ClientGen을 사용하여이 웹 서비스의 스켈레톤/스텁을 생성했습니다.WebLogic 10.3에서 WS Security 웹 서비스 구현 중 오류가 발생했습니다.

키와 인증서가 포함 된 WSIdentity.jks와 WSTrust.jks라는 두 개의 키 저장소가 있습니다. WSIdentity.jks의 별명 중 하나는 "ws02p"입니다. 나는 다음과 같은 스택 내가 오류를 얻고있다 "잘못된 서명 정책을"이 테스트 클라이언트를 사용하여이 웹 servcie를 호출하려고 할 때

SecureSimpleService service = new SecureSimpleService(); 
SecureSimplePortType port = service.getSecureSimplePortType(); 

List credProviders = new ArrayList(); 
CredentialProvider cp = new ClientBSTCredentialProvider(
    "E:\\workspace\\SecureServiceWL103\\keystores\\WSIdentity.jks", 
    "webservice", "ws01p","webservice"); 

credProviders.add(cp); 

string endpointURL="http://localhost:7001/SecureSimpleService/SecureSimpleService"; 
BindingProvider bp = (BindingProvider)port; 
Map<String, Object> requestContext = bp.getRequestContext(); 

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpointURL); 
requestContext.put(WSSecurityContext.CREDENTIAL_PROVIDER_LIST,credProviders); 

requestContext.put(WSSecurityContext.TRUST_MANAGER, new TrustManager() { 
    public boolean certificateCallback(X509Certificate[] chain, 
    int validateErr) { 
     // Put some custom validation code in here. 
     // Just return true for now 
     return true; 
    } 
}); 

SignResponse resp1 = new SignResponse(); 

***resp1 = port.echoSignOnlyMessage("hello sign");*** 
System.out.println("Result: " + resp1.getMessage()); 

:

테스트 클라이언트는 웹 서비스를 호출 할 수있는 다음과 같은 코드가 있습니다 추적 :

*[java] weblogic.wsee.security.wss.policy.SecurityPolicyArchitectureException: Invalid signing policy 
    [java] at weblogic.wsee.security.wss.plan.SecurityPolicyBlueprintDesigner.verifyPolicy(SecurityPolicyBlueprintDesigner.java:786) 
    [java] at weblogic.wsee.security.wss.plan.SecurityPolicyBlueprintDesigner.designOutboundBlueprint(SecurityPolicyBlueprintDesigner.java:136) 

WebLogic 관리 콘솔의 구성 설정이 누락되었거나 다른 이유가 있습니까?

답변

0

나는 당신과 같은 오류가 있습니다. 우리는 10.3을 사용하기 시작했고이 오류가 발생하기 시작했습니다. 이전 weblogic 버전도 좋았습니다. jdk 1.6의 wsimport 도구를 사용하여 클라이언트 측 클래스를 생성했습니다. weblogic 서버 외부에서 클라이언트를 실행하고 jdk1.6 구현에만 의존한다면, 나는 그 진가를 알 수 없습니다. 그러나 weblogic.jar이 클래스 경로에 있으면 예외가 발생합니다. jdk 1.6과 weblogic은 jax-ws 구현을 가지고 있습니다.

jlog 1.6을 사용하여 클라이언트를 weblogic 외부에서 junit하고 classpath에서 다른 weblogic.jar 버전을 시도하면 다른 결과가 나타날 수 있습니다.

우리의 웹 서비스는 편도 SSL입니다. 클라이언트는 호스트를 신뢰하면됩니다. 서버 인증서는 jdk와 weblogic이 사용하는 truststore에 있습니다. 즉 cacerts. 내가 생각했을 보안과 관련해서는 더 이상 필요하지 않아야합니다.

jdk 1.6 또는 이전 웹 로직 버전 만 사용하면 다음 코드가 올바르게 작동합니다. 10.3에서 weblogic.jar이 그러나 클래스 패스에있는 경우

TestService test = new TestService(); 
TestPortType port = test.getTestPort(); 
((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
     "https://host/test"); 

((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, 
     "user_name"); 

((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, 
     "password"); 

TestRequest request = new TestRequest(); 
request.setWho("Dan Mad"); 
TestResult result = port.send(request); 
System.out.println("result: "+result.getResult()); 

은, 위의 코드는 SecurityPolicyArchitectureException 예외로 이상 떨어진다. 우리 고객이 제공해야 할 것이 무엇인지 확신 할 수 없습니다. 귀하의 고객은 더 많은 보안 관련 사항을 설정하고 있지만 이것이 우리의 경우에 필요한지 확실하지 않습니다. 나는 오라클에 요청을 제출했다. 행운은 아직 없습니다.

0

비누 메시지 헤더에 문제가 있다고 생각합니다. 나 자신이 비누 머리글을 생성하는 것이 좋습니다.

http://www.javadb.com/using-a-message-handler-to-alter-the-soap-header-in-a-web-service-client/

당신은 당신이 원하는 것을 얻을 수있는 헤더를 변경할 수 있으며 soapUI 응용 프로그램에서 원하는 SOAP 요청 메시지 형식을 확인할 수 있습니다 그것을 찾기 위해 아래 링크를 따르십시오.

관련 문제