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

问题描述 投票:1回答:1

我们有一个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:未满足安全性要求 - 在策略中配置传输绑定,但传入消息未在com.sun.xml.wss.impl.policy.verifier.MessagePolicyVerifier.verifyPolicy中启用SSL( MessagePolicyVerifier.java:125)位于com.sun.xml.ws.security.opt.impl.incoming的com.sun.xml.ws.security.opt.impl.incoming.SecurityRecipient.createMessage(SecurityRecipient.java:983)。 com中的com.sun.xml.wss.provider.wsit.WSITServerAuthContext.verifyInboundMessage(WSITServerAuthContext.java:586)中的SecurityRecipient.validateMessage(SecurityRecipient.java:232)com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest( WSITServerAuthContext.java:360)位于com.sun.enter.com的网站上的com.sun.xml.wss.provider.wsit.WSITServerAuthContext.validateRequest(WSITServerAuthContext.java:263).CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:173)在com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(Co mmonServerSecurityPipe.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 va.util.List com.enginsol.ActivityEJB,组件ActivityEJB上的EJB调用失败。 getActivities(int):javax.ejb.EJBException:javax.xml.ws.soap.SOAPFaultException:org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:166)中的无效安全标头[jboss-as- ejb3-7.1.0.Final.jar:7.1.0.Final] at 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] org.jboss.as.ejb3.component.interceptors.CurrentInvocationConte org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)中的xtInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)[jboss-as-ejb3-7.1.0.Final.jar:7.1.0.Final] [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。在org.jboss.as.ee.component的org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]的1.0.Final] .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。在org.jboss的org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final]的Final.jar:7.1.0.Final] .invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final] at org.jboss.as.ee.component.ViewService $ View.invoke(ViewService .java:165)[jboss-as-ee-7.1.0.Final.jar:7.1.0.Final] at org.jboss.as.ee.component.ViewDescription $ 1.processInvocation(ViewD) escription.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]在org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)[jboss-invocation-1.1.1.Final.jar:1.1.1.Final] at at 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?

更新:

我经历了并按照吉姆(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端点,所以我浏览了指南中的相关信息,但我仍然得到相同的错误。

web-services ssl jax-ws glassfish-3
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.