Мы поддерживаем 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 для этого.Заранее спасибо!