Jboss 6.1.0 の SSL に問題があります。CLIEN-CERT を使用して、クライアント証明書で特定のセキュリティ制約を制限します。必要なすべての場所を構成しました( web.xml, jboss-web.xml, jboss-loggin, server.xml, jboss-service
)。JDK6 でサーバーを起動するとすべて正常に動作しますが、JDK7 でサーバーを起動してセキュリティ制約にアクセスしようとすると、SSL 属性を取得中にエラー Exception が発生します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
、ハンドシェイク メソッドにサイクルがあり、JDK6 では、そのサイクルに初めて入り、InputStream ブラウザ ウィンドウからバイトを読み取り、クライアント証明書を要求することがわかりましたが、JDK7 ではこれは発生しませんでした。クライアントが証明書を送信しなかったため、メソッドの最後にエラーがスローされます。実際には、このブラウザ ウィンドウは後で開かれ、証明書を送信しても何も起こりません。ハンドシェイクが完了してfalse
結果が得られるためです。Firefox、IE、Chrome で試してみましたが、結果は同じです。誰かが私を助けたり、アドバイスをくれたりしたら、それは素晴らしいことです。