Jboss AS 6.1.0使用Java7进行握手超时

时间:2014-11-10 09:37:03

标签: java ssl jboss socketexception sslhandshakeexception

我在Jboss 6.1.0中遇到SSL问题。我使用CLIEN-CERT来限制客户端证书的某些安全性约束。我配置了所有需要的地方(web.xml, jboss-web.xml, jboss-loggin, server.xml, jboss-service)。当我使用JDK6启动服务器时一切正常,但是当我使用JDK7启动服务器并尝试访问安全性约束时,我得到错误异常获取SSL属性:java.net.SocketException: SSL Cert handshake timeout。这是stacktrace:

2014-10-16 17:39:10,184 WARN  [org.apache.coyote.http11.Http11Processor] (http-0.0.0.0-8443-2) Exception getting SSL attributes: java.net.SocketException: SSL Cert handshake timeout  
  at org.apache.tomcat.util.net.jsse.JSSESupport.handShake(JSSESupport.java:178) [:6.1.0.Final]  
  at org.apache.tomcat.util.net.jsse.JSSESupport.getPeerCertificateChain(JSSESupport.java:138) [:6.1.0.Final]  
  at org.apache.coyote.http11.Http11Processor.action(Http11Processor.java:1144) [:6.1.0.Final]  
  at org.apache.coyote.Request.action(Request.java:352) [:6.1.0.Final]  
  at org.apache.catalina.connector.Request.getCertificateChain(Request.java:1112) [:6.1.0.Final]  
  at org.apache.catalina.authenticator.SSLAuthenticator.authenticate(SSLAuthenticator.java:132) [:6.1.0.Final]  
  at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:559) [:6.1.0.Final]  
  at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:88) [:6.1.0.Final]  
  at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:100) [:6.1.0.Final]  
  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159) [:6.1.0.Final]  
  at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) [:6.1.0.Final]  
  at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:567) [:6.1.0.Final]  
  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [:6.1.0.Final]  
  at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:631) [:6.1.0.Final]  
  at org.jboss.web.rewrite.RewriteValve.invoke(RewriteValve.java:273) [:6.1.0.Final]  
  at org.jboss.web.tomcat.service.request.ActiveRequestResponseCacheValve.invoke(ActiveRequestResponseCacheValve.java:53) [:6.1.0.Final]  
  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:362) [:6.1.0.Final]  
  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [:6.1.0.Final]  
  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:654) [:6.1.0.Final]  
  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:951) [:6.1.0.Final]  
  at java.lang.Thread.run(Thread.java:745) [:1.7.0_71]  

当我切换clientAuth="true""want"它的工作时,但"false"并且使用CLIENT-CERT访问安全性约束不适用于JDK7。 我试图调试JSSESupport.java并且看到握手方法中有循环,当在该循环中第一次进入JDK6并且从InputStream浏览器窗口读取字节时打开并请求我的客户端证书,但是使用JDK7这不是发生错误,在方法结束时抛出错误,因为客户端没有发送他的证书。实际上这个浏览器窗口稍后打开,当我提交我的证书时没有任何反应,因为握手已经完成false结果。我试过Firefox,IE,Chrome和结果是一样的。如果有人可以帮助我或给我一个建议,那就太棒了。

2 个答案:

答案 0 :(得分:0)

在我们的项目中,我们有类似的错误来自jboss,但我现在不记得确切的错误。在我们的例子中,我们跳过了它,应用程序正常。

答案 1 :(得分:0)

所以,当我尝试从读取 AppInputStream 时,我调试更多并在 JSSESupport.java:178 中找到 Java 7 <强> SSLSocket 什么都没发生。它试图读取60次,最后如果客户没有确认他对证书的选择,那么&#34; 握手暂停&#34;抛出错误,然后tomcat检查证书,如果没有显示,我有记录&#34; 此请求中不包含任何证书&#34;和响应发送给我错误代码 401 SC_UNAUTHORIZED 并处理停止并且我的过滤器未被调用。 与 Java 6 不同,在第一次尝试从 AppInputStream 中读取时,我要求选择我的客户端证书。 我认为该问题可能与安全领域中 Java 7 的变化和 SSL(TLS)的实施有关,或者从此 AppInputStream读取时出现一些同步问题,因为这个证书请求在抛出错误后会出现,但错误代码已在响应中设置。

相关问题