Двухсторонний SSL - или взаимная аутентификация - обычно диктуется сервером в HTTPS.Например, в этом руководстве объясняется, как настроить сервер приложений WildFly, чтобы клиенты веб-сервисов предъявляли сертификат во время связи.
Однако в нашем случае нам нужно включить двусторонний SSL нана стороне клиента.Это означает, что наш клиент настроен с сертификатом клиента, чтобы он мог предоставить сертификат во время рукопожатия.Если сервер, к которому мы подключаемся, не запрашивает сертификат, мы хотим прервать связь.
Описание рукопожатия SSL, например, схема в разделе «Протокол SSL» здесь (чуть дальше) объясните, как в первую очередь происходит выбор набора шифров:
"1. Client hello - клиент отправляет информацию о сервере, включая самую высокую версию SSL, которую он поддерживает, исписок поддерживаемых наборов шифров (TLS 1.0 обозначен как SSL 3.1.) Информация набора шифров включает в себя криптографические алгоритмы и размеры ключей. "
На стороне Java (более конкретно: CXF в моем случае) можно фильтровать наборы шифров ( "cipherSuitesFilter" ) - поэтому я подумал, что можно ограничить наборы шифров теми, которые требуют взаимной аутентификации.Но я не нахожу никаких связей между комплектами шифров и двусторонним SSL.Например, эта страница примечания:
алгоритм аутентификации - определяет, как будет выполняться аутентификация сервера и (при необходимости) аутентификация клиента.
Я начинаю думать, что это означает, что набор шифров только диктует как аутентификация клиента, а не , если аутентификация клиента требуется.
Это оставляет меня в тупикеконец.Есть ли другой способ принудительной аутентификации клиента на стороне клиента?
В настоящее время единственное решение, о котором я могу подумать, - это найти правильный способ подключения для связи SSL после установления связи, проверяя,соединение использует аутентификацию клиента и прерывание, если это не так.Но я бы хотел использовать любой общий подход, если такая вещь существует.