2017-12-08 46 views
0

나는 JMeter를 응답비누 : 나는 JMeter가 요청을 실행할 때 ServerThese 정책 대안은 JMeter를

 ?xml version="1.0" encoding="UTF-8"?>soap:ServerThese policy alternatives can not be satisfied: 

{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702} AsymmetricBinding: Received Timestamp does not match the requirements 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702} InitiatorToken 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702} RecipientToken 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702} IncludeTimestamp: Received Timestamp does not match the requirements 

에서 다음과 같은 오류를 얻을 수에 만족 할 수 없습니다. SOAP UI를 사용해도 똑같이 작동합니다.

요청에 암호화 된 형식의 타임 스탬프 ID가없는 것을 확인합니다. 다음은

는 JMeter를을 사용하여 내가 triggerred 요청입니다

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soap="http://soap.abz.com/"> 
    <soapenv:Header> 
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
         xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsu:Timestamp> 
       <wsu:Created>${CREATED}</wsu:Created> 
       <wsu:Expires>${EXPIRES}</wsu:Expires> 
      </wsu:Timestamp> 
     </wsse:Security> 
     </soapenv:Header> 
    <soapenv:Body> 
     <soap:validate> 
     <!--Optional:--> 
     <check>1007 1940 0000 0100 27</check> 
     </soap:validate> 
    </soapenv:Body> 
</soapenv:Envelope> 

서버 로그 : 나는 JMeter를 3.3

에서 SOAP 요청을하여 JMeter에 전처리로 SOAP 메시지 암호화 기 및 서명자 키를 사용

Dec 07, 2017 2:57:30 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging 
WARNING: Interceptor for {http://soap.abz.com/}ServiceImplService#{http://soap.abz.com/}validate has thrown exception, unwinding now 
org.apache.cxf.ws.policy.PolicyException: These policy alternatives can not be satisfied: 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}AsymmetricBinding: Received Timestamp does not match the requirements 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}InitiatorToken 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}RecipientToken 
{http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702}IncludeTimestamp: Received Timestamp does not match the requirements 
     at org.apache.cxf.ws.policy.AssertionInfoMap.checkEffectivePolicy(AssertionInfoMap.java:167) 
     at org.apache.cxf.ws.policy.PolicyVerificationInInterceptor.handle(PolicyVerificationInInterceptor.java:101) 
     at org.apache.cxf.ws.policy.AbstractPolicyInterceptor.handleMessage(AbstractPolicyInterceptor.java:44) 
     at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271) 
     at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) 
     at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239) 
     at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:218) 
     at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:198) 
     at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:137) 
     at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:158) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:243) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:163) 
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
     at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:219) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110) 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
     at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:683) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445) 
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115) 
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637) 
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
     at java.lang.Thread.run(Thread.java:745) 

여기에서 도움을 주시면 감사하겠습니다.

답변

0

메시지는 타임 스탬프 형식이 잘못되었음을 나타냅니다. 응용 프로그램이 실제로 특정 사용자 이름과 암호없이 WS 프로토콜 기반 보안을 사용하는 경우 아래 해결책이 효과가있을 수 있습니다. 나는 당신이 당신의 타임 스탬프를위한 형식을 정정 할 필요가 있다고 생각한다. 내 경우에는, 난 그냥 위의 링크 당으로 SOAP 특정 사전/사후 프로세서를

http://abeykoon.blogspot.com/2015/03/jmeter-test-for-secured-proxy-service.html

를 사용하지 않고 전체 SOAP 프로토콜 메시지와 일반 HTTP 샘플러로 사용, 당신은 사용자 이름과 함께 헤더를 보낼 필요 응용 프로그램이 암호를 요구하지만 정확한 시간 소인이있는 경우 암호. 위의 링크에서 코드를 생성하는 코드도 제공됩니다. 내 응용 프로그램에 대해 수행 한 NOnce에 대해 빈 값을 전달할 수 있습니다. 그렇지 않으면 오류 원인에 따라 해당 JBoss의 jar 파일이 사용자의 JMeter를 설치

<soapenv:Header> 
     <wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsu:Timestamp wsu:Id="TS-05CB7D74E166EF0AB614268666650771109"> 
       <wsu:Created>${#timeC#}</wsu:Created> 
       <wsu:Expires>${#timeE#}</wsu:Expires> 
      </wsu:Timestamp> 
      <wsse:UsernameToken wsu:Id="UsernameToken-05CB7D74E166EF0AB614268666650771108"> 
       <wsse:Username>${username}</wsse:Username> 
       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">${password}</wsse:Password> 
       <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">${#nonce#}</wsse:Nonce> 
       <wsu:Created>${#UTtimeC#}</wsu:Created> 
      </wsse:UsernameToken> 
     </wsse:Security> 
    </soapenv:Header> 



import org.apache.jmeter.protocol.http.sampler.WebServiceSampler; 
import org.apache.jmeter.protocol.http.sampler.SoapSampler; 
import org.jboss.ws.extensions.security.nonce.DefaultNonceGenerator; //(jbossws­core.jar) 
import org.jboss.util.Base64; //this class is called inside the DefaultNonceGenerator class (jboss­common.jar) 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 
  
//generating NONCE 
DefaultNonceGenerator nonce_Gen = new DefaultNonceGenerator(); 
String nonce = nonce_Gen.generateNonce(); 
//generating relevant Timestamps 
long ctmilli = System.currentTimeMillis(); // current time in milliseconds 
SimpleDateFormat dformat1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");    // timestamp format with nonce 
SimpleDateFormat dformat2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");  //timestamp format for usernametoken, with miliseconds 
Date dtime = new Date(); 
dformat1.setTimeZone(TimeZone.getTimeZone("UTC")); 
dtime.setTime(ctmilli);  // current time 
String timeCreated = dformat1.format(dtime); // timestamp created in format1 
String uttimeCreated = dformat2.format(dtime); // timestamp created in format2 
dtime.setTime(ctmilli+2000); // setting the timeout  for 2seconds, change the timeout as required 
String timeExpire = dformat1.format(dtime);  // expiration timestamp in format1 
vars.put("#timeC#",timeCreated); 
vars.put("#timeE#",timeExpire); 
vars.put("#nonce#",nonce); 
vars.put("#UTtimeC#",uttimeCreated); 
0

의 \ lib 디렉토리 \ 내선 디렉토리에 배치되어 있는지 확인해야합니다

수신 타임 스탬프가 일치하지 않습니다 요구 사항

${CREATED} 또는 ${EXPIRES} 변수 (또는 둘 다) 중 하나가 서버의 기대와 일치하지 않는 것으로 보인다. Debug SamplerView Results Tree 수신기 조합을 사용하여 값을 확인하고 서버에서 원하는 형식에 따라 생성 방법을 수정하십시오.

또한 WS Security for SOAP 이론적으로 사용자의 삶을 편하게 할 수있는 JMeter 플러그인이 있다는 것을 알고 있어야합니다. JMeter Plugins Manager

JMeter Web Service Security Plugin

을 사용하여 설치할 수 있습니다.