1

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 で試してみましたが、結果は同じです。誰かが私を助けたり、アドバイスをくれたりしたら、それは素晴らしいことです。

4

2 に答える 2

0

私たちのプロジェクトでは、同様のエラーが jboss から発生していますが、正確なエラーを今思い出せません。私たちの場合、それをスキップし、アプリケーションは正常に動作します。

于 2014-11-10T09:45:38.507 に答える
0

そのため、さらにデバッグすると、JSSESupport.java:178 のJava 7SSLSocketからAppInputStreamを読み込もうとしても何も起こらないことがわかりました。60回読み取りを試行し、最後にクライアントが証明書の選択を確認しない場合、この「ハンドシェイクタイムアウト」エラーがスローされ、その後、Tomcatが証明書をチェックし、提示されていない場合は「この要求に証明書が含まれていません」と応答をログに記録しますコード401 SC_UNAUTHORIZEDのエラーが送信され、プロセスが停止し、フィルターが呼び出されません。Java 6との違いは、最初にAppInputStreamから読み込もうとしたとき、クライアント証明書の選択を求められます。この問題は、Java 7でのセキュリティ領域の変更とSSL(TLS)の実装に関連しているのか、このAppInputStreamからの読み取りに同期の問題があるのか​​ 、エラーがスローされた後にこの証明書の要求が後で来るため、問題が発生した可能性があると思いますが、エラーコードはすでに応答に設定されています。

于 2014-11-11T14:36:06.900 に答える