簡體   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