eclipse-ee4j / eclipse-ee4j/metro-wsit
Improve WSIT client error reporting for SpnegoContextToken and SslContextToken
- Dominant language
- Java
- Stars
- 6
- Forks
- 21
- Avg merge
- 10h 2m
- Merged PRs (30d)
- 1
Description
When using message security with WCF, WCF by default passes the certificate
within the message. It seems to use SslContextToken and SpnegoContextToken to
indicate that in the service policy. Our client logs these assertions as
unknown, but does not fail and later generates confusing error messages because
the message exchange fails later in the pipe.
Here is a sample configuration
This is the output of our client:
[#|2007-06-08T12:51:35.963+0300|WARNING|sun-appserver9.1|javax.enterprise.resource.xml.webservices.security.policy|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=68771ebe-4345-461e-8799-010b137ec661;|SP0100:
Policy assertion Assertion {
assertion data {
namespace = 'http://schemas.microsoft.com/ws/2005/07/securitypolicy'
prefix = 'mssp'
local name = 'SslContextToken'
value = 'null'
attributes
{ name = 'http://schemas.xmlsoap.org/ws/2005/07/securitypolicy:IncludeToken', value = 'http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient' }
}
no parameters
nested policy {
id = 'null'
name = 'null'
vocabulary
{ 1\. entry = 'http://schemas.microsoft.com/ws/2005/07/securitypolicy:RequireClientCertificate' 2\. entry = 'http://schemas.xmlsoap.org/ws/2005/07/securitypolicy:RequireDerivedKeys' }
assertion set {
Assertion {
assertion data
{ namespace = 'http://schemas.microsoft.com/ws/2005/07/securitypolicy' prefix = 'mssp' local name = 'RequireClientCertificate' value = 'null' no attributes }
no parameters
no nested policy
}
Assertion {
assertion data
{ namespace = 'http://schemas.xmlsoap.org/ws/2005/07/securitypolicy' prefix = 'sp' local name = 'RequireDerivedKeys' value = 'null' no attributes }
no parameters
no nested policy
}
}
}
} is not supported under Token assertion.|#]
[#|2007-06-08T12:51:35.968+0300|SEVERE|sun-appserver9.1|com.sun.xml.wss.jaxws.impl|_ThreadID=18;_ThreadName=httpSSLWorkerThread-8080-1;_RequestID=68771ebe-4345-461e-8799-010b137ec661;|WSSPIPE0012:
Internal Error: Could not detect whether Reliable Messaging is enabled or not.
java.lang.NullPointerException
at
com.sun.xml.ws.security.impl.policyconv.BindingProcessor.addPrimaryTargets(BindingProcessor.java:167)
at
com.sun.xml.ws.security.impl.policyconv.SymmetricBindingProcessor.process(SymmetricBindingProcessor.java:127)
at
com.sun.xml.ws.security.impl.policyconv.XWSSPolicyGenerator.process(XWSSPolicyGenerator.java:159)
at
com.sun.xml.ws.security.impl.policyconv.XWSSPolicyGenerator.process(XWSSPolicyGenerator.java:121)
at
com.sun.xml.wss.jaxws.impl.SecurityPipeBase.constructPolicyHolder(SecurityPipeBase.java:1139)
at
com.sun.xml.wss.jaxws.impl.SecurityClientPipe.addIncomingProtocolPolicy(SecurityClientPipe.java:383)
at
com.sun.xml.wss.jaxws.impl.SecurityPipeBase.buildProtocolPolicy(SecurityPipeBase.java:1092)
at
com.sun.xml.wss.jaxws.impl.SecurityPipeBase.collectPolicies(SecurityPipeBase.java:658)
at
com.sun.xml.wss.jaxws.impl.SecurityPipeBase.(SecurityPipeBase.java:271)
at
com.sun.xml.wss.jaxws.impl.SecurityClientPipe.(SecurityClientPipe.java:95)
at
com.sun.xml.ws.assembler.PipelineAssemblerFactoryImpl$WsitPipelineAssembler.createClient(PipelineAssemblerFactoryImpl.java:197)
at
com.sun.xml.ws.api.pipe.TubelineAssemblerFactory$TubelineAssemblerAdapter.createClient(TubelineAssemblerFactory.java:100)
at
com.sun.xml.ws.client.WSServiceDelegate.createPipeline(WSServiceDelegate.java:397)
at
com.sun.xml.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:558)
at
com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:306)
at
com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:288)
at
com.sun.xml.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:281)
at javax.xml.ws.Service.getPort(Service.java:92)
at
com.sun.xml.ws.test.client.MyService.getMyServiceEndpoint(MyService.java:56)
at org.apache.jsp.index_jsp._jspService(index_jsp.java:68)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:477)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:371)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
at
org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:411)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:290)
at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:271)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:202)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:624)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:206)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:624)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:150)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:624)
at
org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:577)
at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:571)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1080)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:268)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:631)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:562)
at
com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:803)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:339)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:261)
at
com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:212)
at
com.sun.enterprise.web.portunif.PortUnificationPipeline$PUTask.doTask(PortUnificationPipeline.java:359)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at
com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
| #] |
#### Environment
Operating System: Windows Vista
Platform: Other
#### Affected Versions
[current]
Source: [https://github.com/javaee/metro-wsit/issues/588](https://github.com/javaee/metro-wsit/issues/588)
Author: glassfishrobot
Contributor guide
Research direction
Start with XWSSPolicyGenerator.process, SymmetricBindingProcessor.process, and BindingProcessor.addPrimaryTargets from the reported stack trace, then trace how SslContextToken and SpnegoContextToken are handled. Done means the client reports these unsupported assertions clearly and immediately instead of continuing to a later NullPointerException.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- backend, security
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100