2014-11-10 8 views
1

У меня проблема с SSL в Jboss 6.1.0. Я использую 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:Jboss AS 6.1.0 Тайм-аут установления связи с Java7

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, и результат был таким же. Если кто-то может мне помочь или дать мне совет, это было бы здорово.

ответ

0

В нашем проекте мы имеем аналогичную ошибку, исходящую от jboss, но я не могу сейчас вспомнить точную ошибку. В нашем случае мы пропустили его, и приложения работают нормально.

+0

Не могли бы вы вспомнить, что было ошибкой? В моем случае проблема в том, что у меня есть фильтр SPRING, в котором я должен получить сертификат и сделать некоторую логику, и когда у меня есть эта ошибка, мой фильтр не работает (он не вызывается), я не знаю, почему .. –

+0

В настоящее время у меня нет доступа к ноутбуку моей компании, чтобы вывести его из офиса на следующий день ... – m0tylan0ga

0

Итак, я отлаживать больше и обнаружить, что с Java 7 в JSSESupport.java:178, когда он пытается прочитать AppInputStream из SSLSocket ничего не случилось. Он пытается прочитать 60 раз и, наконец, если клиент не подтвердит свой выбор для сертификата, это «Время ожидания Handhake», и после этого проверка tomcat для сертификата и если он не представлен, у меня есть журнал «Никаких сертификатов, включенных в этот запрос "и ответьте, пожалуйста, код с кодом 401 SC_UNAUTHORIZED и остановите обработку, и мои фильтры не будут активированы. В отличии от Java 6, когда он пытается прочитать от AppInputStream, меня попросили выбрать мой клиентский сертификат. Я думаю, что проблема может иметь связь с изменениями в Java 7 в области безопасности и реализации SSL (TLS), или какой-либо проблемы синхронизации с чтением из этого AppInputStream, потому что запрос на получение сертификата приходит позже, после того, как ошибка вызывается, но код ошибки уже установлен в ответ.

+0

Вы нашли какое-нибудь решение? Мы просто вмешались в эту же проблему, пытаясь обновить Java 1.7. – CristianTM

+1

Решение - это исправление JSSESupport # handShake, поэтому вместо байта [] b = новый байт [1]; используйте новый байт [0]. Это должно соответствовать изменениям, внесенным в Java 7 при чтении из InputStream и должно работать. –

 Смежные вопросы

  • Нет связанных вопросов^_^