向Web Service添加SSL时无效的安全标头

时间:2012-04-09 15:07:42

标签: web-services ssl jax-ws glassfish-3

我们有一个Web应用程序,它由向我们的前端开发团队公开的各种Web服务组成。我们是一家小店,所以我们从未担心过安全问题,但我们仍然想知道如何实施。

我们正在使用Netbeans 7.0.1,Glassfish 3.1.1 b12和SOAP。我们通过Netbeans中的向导配置了基本安全性并使其正常工作。然后我们尝试添加Transport Security,并验证它已添加到WSDL文件中。当我们尝试添加SSL时,我们遇到以下错误:

在服务器端:

  

严重:WSS1601:未满足安全要求 - 在策略中配置传输绑定但传入的消息未启用SSL   严重:WSITPVD0035:验证入站邮件中的安全性时出错。   com.sun.xml.wss.impl.XWSSecurityRuntimeException:WSS1601:未满足安全性要求 - 在策略中配置传输绑定但传入的消息未启用SSL       at com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy(MessagePolicyVerifier.java:125)       at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:983)       at com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.validateMessage(SecurityRecipient.java:232)       at com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:586)       at com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:360)       at 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)

在客户端:

  

09:36:16,464警告[org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor](http - 127.0.0.1-443-1)请求不包含安全标头,但是它是   一个错误。   09:36:16,467 ERROR [org.jboss.ejb3.invocation](http - 127.0.0.1-443-1)JBAS014134:对于方法public ja,组件ActivityEJB上的EJB调用失败   va.util.List com.enginsol.ActivityEJB.getActivities(int):javax.ejb.EJBException:javax.xml.ws.soap.SOAPFaultException:无效的安全标头           at org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:230)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final]           at org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:304)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final]           at org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:190)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)    [JBoss的-AS-ejb3-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)[jboss-as-ejb3-7.1.0.Final.jar:7。   1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)[jboss-as-ee-7.1.0.Final.jar:7   .1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)[jboss-as-ee-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           在org.jboss.as.ee.component.ViewService $ View.invoke(ViewService.java:165)[jboss-as-ee-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.as.ee.component.ViewDescription $ 1.processInvocation(ViewDescription.java:173)[jboss-as-ee-7.1.0.Final.jar:7.1.0.Final]           在org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]           在org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:72)[jboss-as-ee-7.1.0.Final.jar:7.1.0.Final]

在sun-ejb-jar.xml中,每个Web服务的保护方式基本相同:

<ejb>
        <ejb-name>ActivityWS</ejb-name>
        <webservice-endpoint>
            <port-component-name>ActivityWS</port-component-name>
            <login-config>
                <auth-method>BASIC</auth-method>
            </login-config>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </webservice-endpoint>
    </ejb>

我非常确定证书设置是否正确完成,因为我们已经清除了与丢失的密钥库和错误的密钥库密码相关的启动错误。此外,我们最近添加的RESTful服务工作正常(弹出用户名/密码的对话框并通过SSL运行)。客户端和服务器最初都部署到Glassfish,但我们创建了一个服务的小消费者,并将其部署到JBoss 7.1以尝试排除Glassfish错误。

这是我们在SO上找到的最接近的答案,OP给出的答案含糊不清,所以我们仍然没有解决方案。 Java Glassfish - How to consume SSL web service?

更新

我经历了并遵循Jim发布的指南(http://www.ryandelaplante.com/2007/06/ssl-and-http-basic-authentication-with.html)并稍微调整了我的设置。我向sun-ejb-jar添加了安全角色,并将允许注释的角色添加到Web Service(之前,角色是在sun-application.xml和另一个ejb-jar.xml中处理的)。我们的服务是EJB端点,所以我浏览了指南中的相关信息,但我仍然得到相同的错误。

1 个答案:

答案 0 :(得分:0)

您在哪里添加证书?在glassfish中的domain1 / config目录中的keystore.jks?您是否将SSL http侦听器指向新证书的别名?您是否连接到ssl端口上的glassfish(默认为8181)?