2012-04-09 66 views
1

我们有一个Web应用程序,它包含暴露给我们前端开发团队的各种Web服务。我们是一家小商店,所以安全问题从未成为我们的关注点,但我们仍然想知道如何实施它。将SSL添加到Web服务时无效的安全标头

我们使用Netbeans 7.0.1,Glassfish 3.1.1 b12和SOAP。我们已经通过Netbeans中的向导配置了基本的安全性,并开始工作。然后,我们尝试添加传输安全性,并验证它已添加到WSDL文件。这是当我们尝试添加我们得到了以下错误SSL:

在服务器端:

重度:WSS1601:安全要求没有得到满足 - 在政策的传输绑定配置,但收到的消息不是已启用SSL SEVERE: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。 imp1.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.validateReques t(WSITServerAuthContext.java:263) at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.processRequest(CommonServerSecurityPipe.java:173) at com.sun.enterprise.security.webservices.CommonServerSecurityPipe.process(CommonServerSecurityPipe.java: 144) 在com.sun.xml.ws.api.pipe.helper.PipeAdapter.processRequest(PipeAdapter.java:119)

在客户端:

09:36:16464警告[org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor](http - 127.0.0.1-443-1)请求不包含安全性标头,但它是 出现故障。 09:36:16,467错误[org.jboss.ejb3.invocation](http - 127.0.0.1-443-1)JBAS014134:对于方法public ja va.util.List com.enginsol,组件ActivityEJB上的EJB调用失败。 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] 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。最终] at 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] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java :288)[jboss-invocation-1.1.1.Final.jar:1.1.1。最终] 在org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:59)的JBoss-AS-ejb3-7.1.0.Final.jar:7。 1.0.Final] at 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] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext。的java:288)[JBoss的-调用-1.1.1.Final.jar:1.1.1.Final] 在org.jboss.as.ee.component.TCCLInterceptor.processInvocation(TCCLInterceptor.java:45)的jboss-原样ee-7.1.0.Final.jar:7.1.0.Final] at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:288)[jboss-invocation-1.1.1.Final.jar:1.1.1 .Final] at org.jboss.invocation.ChainedInterceptor.processInvoc ation(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] 在org.jboss.as.ee.component.ViewDescription $ 1.processInvocation(ViewDescription.java:173)的jboss-原样ee-7.1.0.Final.jar:7.1.0.Final] at 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-调用-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]

每个Web服务基本上是保护在阳光-ejb-jar.xml中以同样的方式:

<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?

UPDATE:

我经历了,跟着(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端点,所以我通过了指南中的相关信息,但仍然遇到相同的错误。

回答

0

你在哪里添加证书? glassfish中domain1/config目录中的keystore.jks?你有没有把你的SSL HTTP监听器指向新的证书的别名?你有没有连接到ssl端口上的glassfish(默认为8181)?

+0

是的,证书被插入到默认glassfish密钥库中。我删除了原始文件,生成了一个新文件并使用我的完整限定名称创建了一个新文件在客户端,我创建了一个新的密钥库并将我的证书导入到该密钥库中。当客户端只是一个Java SE应用程序时,我将该证书导入位于$ JAVA_HOME/jre/lib/security中的密钥库中,并带有相同的错误消息。 – MikeG 2012-04-09 15:42:43

+0

为了澄清,新证书使用与旧证书相同的别名?我想这就是你说的。 – Jim 2012-04-09 15:48:23

+0

另外,关于你的证书,你是否生成了它,或者你从委托,verisign或thawte这样的东西得到它? – Jim 2012-04-09 15:49:56