SSL-квитирование веб-службы не выполняется в производственной среде, если не включена отладка SSL - PullRequest
1 голос
/ 11 июня 2010

Сценарий: вызов клиентского веб-сервиса по SSL (https) с взаимной аутентификацией SSL. Различные URL-адреса и сертификаты конечных точек службы (хранилище ключей и хранилище доверенных сертификатов) для среды тестирования и рабочей среды. Как в тестовой, так и в производственной среде работает кластер tomcat / JBoss. Производственная среда имеет балансировку нагрузки / BigIP, работает на машинах Blade и Non-Blade.

Truststore устанавливается (используя -Djavax.net.ssl.trustStore = значение ) при запуске. Keystore устанавливается с помощью System.setProperty ("javax.net.ssl.keyStore", " value ") в коде Java. Вызов веб-сервиса сделан с использованием Axis2. Все отлично работает в тестовой среде, но когда мы перешли в производственную среду (6 серверов), кажется, что сертификаты не пересылаются для рукопожатия. Вот что мы сделали:

  • в тестовой среде рукопожатие с использованием тестовых версий сертификатов работало все время, без отладки ssl
  • подтвердил в тестовой среде, что рукопожатие с производством клиента конечная точка успешна (производственные сертификаты, и наши и их, все в порядке) - это было сделано с помощью -Djavax.net.debug = рукопожатия, SSL
  • подтвердил, что ошибка возникает на всех 6 производственных серверах
  • взял один сервер из кластера, включил отладку ssl для только что (с перезапуском), нажмите это напрямую, рукопожатие работает!
  • переключился на другой сервер без включенной отладки, возникает ошибка рукопожатия
  • включил отладку на этом втором сервере (с перезапуском), попал прямо на него, рукопожатие работает!

Судя по доказательствам, кажется, что включенная отладка заставляет сертификаты быть правильно извлечены / переданы, хотя это не имеет смысла! Интересно, заставит ли система как-то включить отладку обратить внимание на вызов System.setProperty и игнорировать его в противном случае. Однако в локальной и тестовой средах рукопожатие работало без включенной отладки.

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

1 Ответ

1 голос
/ 14 июня 2010

Оказывается, что параметром отладки была красная сельдь. На самом деле нас поразило то, что существовал клиент с веб-службой SSL / базовой аутентификации, которую мы вызываем, когда один из их пользователей входит в систему. Поскольку в этом контексте хранилище ключей не имеет значения, свойство javax.net.ssl.keyStore не установлен - но SSL-обмен все еще пытается загрузить хранилище ключей (которое в итоге не загружает сертификаты). Поскольку, к сожалению, даже если значение javax.net.ssl.keyStore изменилось, оно не перезагружается, вызовы веб-службы другого клиента не отправляются без сертификатов хранилища ключей.

Решением было установить свойство keyStore при запуске сервера, а не в точке вызова веб-службы. Если в какой-то момент в будущем нам понадобится использовать разные хранилища ключей в разных контекстах, похоже, нам потребуется реализовать собственный SocketFactory.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...