Ограничение двухстороннего SSL-соединения Wildfly 14 для определенных клиентов - PullRequest
0 голосов
/ 14 декабря 2018

Мы поддерживаем Java-приложение с API-интерфейсом JAX-WS SOAP для внешних систем, работающих на сервере приложений WildFly 14.В настоящее время внешние системы подключаются с использованием обычного одностороннего SSL.Наша цель - переключить связь на взаимную аутентификацию, то есть двусторонний SSL.Однако не все внешние системы могут выполнять переключение в одно и то же время, поэтому простое применение двухстороннего SSL - не вариант.Мы должны перенести их шаг за шагом на переходном этапе.Вот почему я задаюсь вопросом: Есть ли возможность включить двусторонний SSL на интерфейсе HTTPS WildFly только для определенных IP-адресов вызывающих абонентов?

Я основал свои тесты на официальная документация по настройке обычного двустороннего SSL .Следуя этим шагам, каждый абонент должен предоставить сертификат клиента.Изменение этого примера конфигурации для использования want-client-auth вместо need-client-auth смягчает проверки для поддержки двустороннего SSL, но не требует его.К сожалению, этого недостаточно в нашем случае, потому что это не подразумевает гарантии того, что конкретная внешняя система последовательно использует двусторонний SSL или нет.Система может отправить некоторые из своих запросов с предоставлением сертификата клиента, а некоторые без него.Другими словами, бизнес нуждается в способе сказать: «С этого дня внешняя система Foo может использовать API только с сертификатом клиента. На данный момент все остальные внешние системы не затронуты».

Чтобы реализовать это - желательно без изменений кода приложения - я читал документацию нового модуля безопасности WildFly Elytron .Это кажется довольно расширяемым, но подробности о пользовательских компонентах немногочисленны, и я не нашел точки расширения, которая бы звучала так, как будто бы это поможет в моем случае.

Единственный подход к решению, который у меня есть сейчас, - это настройка отдельного наборапривязки к сокету и https-слушателя для Wildfly, аналогично описанному здесь .Это означает, что у нас будет два порта HTTPS: один с односторонним SSL, а другой с обязательным двусторонним SSL.Когда внешние системы завершают свои шаги по миграции, они переключают порт, используемый для вызова нашего API.Для того чтобы заставить их использовать только двусторонний порт SSL, с этого момента потребуются определенные правила брандмауэра, но это должно быть возможно.

Таким образом, это решение довольно просто в технической реализации, но приводит к дополнительным расходам на повторную настройкувнешние системы и адаптация правил брандмауэра.Вот почему я буду рад любым предложениям по более элегантному решению или советам, как использовать Elytron для этого.Заранее спасибо!

1 Ответ

0 голосов
/ 19 декабря 2018

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

По поводу расширяющегося сервера.Я думаю, SSL рукопожатие - очень ранний шаг, и после этого участвуют различные точки настройки.Я подумал о каком-то пользовательском обработчике Undertow, похожем на [1], но, как я уже сказал, это будет слишком поздно.

[1] http://undertow.io/undertow-docs/undertow-docs-2.0.0/index.html#redirect-handler

...