【发布时间】:2015-01-06 13:41:07
【问题描述】:
我在 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。这是堆栈跟踪:
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 并看到在该循环中第一次进入并从 InputStream 浏览器窗口读取字节并请求我的客户端证书时,握手方法和 JDK6 中存在循环并请求我的客户端证书,但是使用 JDK7 这没有发生了,在方法结束时抛出错误,因为客户端没有发送他的证书。实际上这个浏览器窗口稍后会打开,当我提交我的证书时,什么也没有发生,因为握手以false 结果完成。我用 Firefox、IE、Chrome 试过,结果是一样的。如果有人可以帮助我或给我建议,那就太好了。
【问题讨论】:
标签: java ssl jboss socketexception sslhandshakeexception