【问题标题】:Java Glassfish - How to consume SSL web service?Java Glassfish - 如何使用 SSL Web 服务?
【发布时间】:2011-04-06 17:37:14
【问题描述】:

我使用 netbeans 在 Glassfish 服务器上创建和部署 SSL ejb hello world Web 服务,然后尝试(不成功)从 Java 应用程序使用该服务。

任何帮助将不胜感激。下面是我所做的更多细节。


  1. 我创建了一个 hello world (ejb) Web 服务。
  2. 我将 hello world Web 服务的安全服务选项设置为传输安全 (SSL)
  3. 我在 glassfish 3.1 上部署了 Web 服务
  4. 我创建了一个 java 应用程序,添加了一个使用 wsdl 使用 hello world Web 服务的 Web 服务客户端:“https://localhost:8181/OanhWebService/OanhWebService?wsdl”
  5. 当我尝试调用 Web 服务时,出现以下错误: 线程“主”javax.xml.ws.soap.SOAPFaultException 中的异常:WSS1601:未满足安全要求 - 策略中配置了传输绑定,但传入消息未启用 SSL 当我尝试打开 Web 服务参考的“编辑 Web 服务属性”对话框时,在“服务质量”选项卡中只有一个选项传输,缺少选项安全性。 请帮忙!这是一项非常基本的任务,但令人惊讶地花费了我很多时间。 非常感谢, 图

下面是更多细节:

------------------工具版本-------------------------- -------

Glassfish 版本:3.1 Netbeans 版本 7.0 RC1(尝试了 6.9.1 和 7 Beta、7 Beta2 但遇到同样的问题!) 地铁2.0

------------------已发布的 WSDL-------------------------- ------------

从 Web 浏览器查看的 WSDL:

@namespace html url(http://www.w3.org/1999/xhtml); :root { 字体:small Verdana;字体粗细:粗体;填充:2em;填充左:4em; } * { 显示:块;左填充:2em; } html|style { 显示:无; } html|span, html|a { 显示:内联;填充:0;字体粗细:正常;文字装饰:无; } html|span.block { 显示:块; } *[html|hidden], span.block[html|hidden] { 显示:无; } .expand { 显示:块; } .expand:before { 内容:'+';红色;位置:绝对;左:-1em; } .collapse { 显示:块; } .collapse:before { 内容:'-';红色;位置:绝对;左:-1em; } http://jax-ws.dev.java.net。 RI 的版本是 Metro/2.1 (branches/2.1-6728; 2011-02-03T14:14:58+0000) JAXWS-RI/2.2.3 JAXWS/2.2。 --> http://jax-ws.dev.java.net。 RI 的版本是 Metro/2.1 (branches/2.1-6728; 2011-02-03T14:14:58+0000) JAXWS-RI/2.2.3 JAXWS/2.2。 -->

----------------客户站点的跟踪--------------- ---------

线程“主”javax.xml.ws.soap.SOAPFaultException 中的异常:WSS1601:未满足安全要求 - 策略中配置了传输绑定,但传入消息未启用 SSL 在 com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178) 在 com.sun.xml.internal.ws.fault.SOAPFaultBuilder.createException(SOAPFaultBuilder.java:119) 在 com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:108) 在 com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78) 在 com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107) 在 $Proxy30.hello(未知来源) 在 oanhejbwebserviceclient.OanhEJBWebServiceClient.hello(OanhEJBWebServiceClient.java:47) 在 oanhejbwebserviceclient.OanhEJBWebServiceClient.main(OanhEJBWebServiceClient.java:39) 原因:javax.xml.ws.soap.SOAPFaultException:WSS1601:未满足安全要求 - 策略中配置了传输绑定,但传入消息未启用 SSL 在 com.sun.xml.ws.security.opt.impl.util.SOAPUtil.createSOAPFault(SOAPUtil.java:223) 在 com.sun.xml.ws.security.opt.impl.util.SOAPUtil.getSOAPFaultException(SOAPUtil.java:215) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:379) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:263) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:173) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:144) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259) 在 com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:162) 在 org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:120) 在 org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:91) 在 org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:200) 在 org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:131) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 在 com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.doFilter(ServletAdapter.java:1002) 在 com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.invokeFilterChain(ServletAdapter.java:942) 在 com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:404) 在 com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:354) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 在 com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:662) 原因:com.sun.xml.wss.impl.XWSSecurityRuntimeException:WSS1601:未满足安全要求 - 策略中配置了传输绑定,但传入消息未启用 SSL 在 com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy(MessagePolicyVerifier.java:125) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:983) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.validateMessage(SecurityRecipient.java:232) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:586) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:360)

-----------服务器站点的跟踪-------- ------------------

严重:WSS1601:未满足安全要求 - 策略中配置了传输绑定,但传入消息未启用 SSL 严重:WSITPVD0035:验证入站消息中的安全性时出错。 com.sun.xml.wss.impl.XWSSecurityRuntimeException:WSS1601:未满足安全要求 - 在策略中配置了传输绑定,但传入消息未启用 SSL 在 com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy(MessagePolicyVerifier.java:125) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:983) 在 com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.validateMessage(SecurityRecipient.java:232) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:586) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:360) 在 com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:263) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:173) 在 com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java:144) 在 com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119) 在 com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:641) 在 com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:600) 在 com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:585) 在 com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:482) 在 com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:314) 在 com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:608) 在 com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:259) 在 com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(ServletAdapter.java:162) 在 org.glassfish.webservices.Ejb3MessageDispatcher.handlePost(Ejb3MessageDispatcher.java:120) 在 org.glassfish.webservices.Ejb3MessageDispatcher.invoke(Ejb3MessageDispatcher.java:91) 在 org.glassfish.webservices.EjbWebServiceServlet.dispatchToEjbEndpoint(EjbWebServiceServlet.java:200) 在 org.glassfish.webservices.EjbWebServiceServlet.service(EjbWebServiceServlet.java:131) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:848) 在 com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.doFilter(ServletAdapter.java:1002) 在 com.sun.grizzly.http.servlet.ServletAdapter$FilterChainImpl.invokeFilterChain(ServletAdapter.java:942) 在 com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:404) 在 com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:354) 在 com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:168) 在 com.sun.enterprise.v3.server.HK2Dispatcher.dispath(HK2Dispatcher.java:117) 在 com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:234) 在 com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822) 在 com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719) 在 com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013) 在 com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) 在 com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 在 com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 在 com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 在 com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 在 com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 在 com.sun.grizzly.ContextTask.run(ContextTask.java:71) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 在 com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 在 java.lang.Thread.run(Thread.java:662)

【问题讨论】:

  • 这应该可以让您更深入地了解问题:blogs.oracle.com/arungupta/entry/totd_22_java_se_client
  • 我看不出将 WSDL 发布为“由 Web 浏览器查看”的意义。 WSDL 不被 Web 浏览器查看,并且不包含 CSS 语句。没有它们,您的帖子会更清晰。

标签: web-services ssl glassfish


【解决方案1】:

问题是我创建了一个带有 web 服务的独立 ejb,然后直接部署了 ejb(没有包装 web 应用程序),在不安全的连接下一切顺利,当使用 SSL 时,我们遇到了所描述的问题。当我使用 Web 服务创建 Web 应用程序时,问题就消失了。我没有时间深入挖掘 ejb 的失败案例。不过还是很好奇... :-)

【讨论】:

    【解决方案2】:

    这与bug有关 升级到 grizzly 1.9.55 或更高版本来修复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-03
      相关资源
      最近更新 更多