Есть ли способ динамического запуска пересмотра SSL / TLS в сервлете? - PullRequest
0 голосов
/ 11 января 2019

Я хочу принимать как клиентов веб-браузера, так и (автоматических) сервисных клиентов к одному сервлету, работающему в моем приложении. Некоторые клиенты службы будут проходить проверку подлинности с помощью клиентских сертификатов TLS, а некоторые - нет. Я не хочу, чтобы у клиентов веб-браузера запрашивался сертификат, даже если у них в браузере установлены некоторые из них. Решение о том, запрашивать ли сертификат клиента, является динамическим и основывается на политике в соответствии с клиентом, поэтому его нельзя настроить статически в файле web.xml.

Есть ли способ динамического запуска пересмотра TLS для запроса сертификата клиента из сервлета? Если бы у меня был доступ к необработанному SSLSocket, я мог бы настроить его на требование сертификата клиента, а затем вызвать startHandshake () для принудительного пересмотра. Насколько я могу судить, не существует портативного способа получить SSLSocket, связанный с запросом / ответом сервлета.

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

1 Ответ

0 голосов
/ 11 января 2019

Вы написали в комментариях выше:

, поскольку этот параметр заставит веб-браузер предложить пользователю выберите сертификат, если у них есть один установленный, который соответствует одному из настроенные CA. Я никогда не хочу, чтобы это случилось с веб-браузером клиенты

Тогда я голосую за то, чего невозможно добиться со стороны сервера. TLS занимает первое место, прежде чем любые данные отправляются через безопасный канал. Вы не можете определить, является ли это веб-браузером или не стучит в вашу дверь, не спрашивая личность клиента. С точки зрения TLS, это просто еще один неназванный сетевой клиент, пытающийся подключиться. После установления безопасного соединения данные отправляются, и вы можете определить, является ли это браузером или нет.

Возможно, вы захотите направить браузеры (1 way ssl) и серверный клиент (2 way ssl) через разные конечные точки.

В противном случае вы можете захотеть реализовать собственную процедуру установления связи по протоколу TLS.

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

Мне любопытно, кто-нибудь знает, как решить ваш вопрос.

...