eclipse-ee4j / eclipse-ee4j/metro-wsit

Improve WSIT client error reporting for SpnegoContextToken and SslContextToken

Open
#220 0 comments 0 reactions 0 assignees View on GitHub
Component: security-policy Priority: Minor Type: Bug
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.