繁体   English   中英

Java7的Jboss AS 6.1.0握手超时

[英]Jboss AS 6.1.0 Handshake timeout with Java7

我在Jboss 6.1.0中遇到SSL问题。 我使用CLIEN-CERT限制客户端证书的某些安全性约束。 我配置了所有需要的位置( web.xml, jboss-web.xml, jboss-loggin, server.xml, jboss-service )。 当我使用JDK6启动服务器时,一切正常,但是当我使用JDK7启动服务器并尝试访问安全性约束时,出现错误Exception,获得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浏览器窗口读取字节并请求我的客户端证书时使用JDK6,但是对于JDK7,这没有发生这种情况时,由于客户端未发送他的证书,该方法的末尾引发了错误。 实际上,此浏览器窗口是稍后打开的,当我提交证书时,什么都不会发生,因为握手已完成,结果是false 我尝试使用Firefox,IE,Chrome和结果是相同的。 如果有人可以帮助我或给我建议,那就太好了。

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

因此,我进行了更多调试,并在JSSESupport.java:178中的 Java 7中尝试从SSLSocket读取AppInputStream时未发现任何问题。 它尝试读取60次,最后,如果客户端未确认选择证书,则会引发“ 握手超时 ”错误,然后在tomcat中检查证书,如果未显示,则显示日志“ 此请求中未包含证书 ”并响应向我发送错误代码为401 SC_UNAUTHORIZED的代码,进程停止,并且未调用我的过滤器。 Java 6不同,在Java 6首次尝试从AppInputStream读取时,要求我选择我的客户端证书。 我认为该问题可能与安全区域中Java 7的更改以及SSL(TLS)的实现有关,或者与从此AppInputStream读取有关的某些同步问题有关 ,因为此证书请求稍后在引发错误之后出现,但是错误代码已经设置为响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM