В Jetty, как поддерживать аутентификацию сертификата только на подмножестве API - PullRequest
0 голосов
/ 01 марта 2019

Я создаю веб-сервис и использую Jetty в качестве сервера.Для некоторых API, предоставляемых этим сервисом, мы хотим, чтобы они проходили аутентификацию по сертификату.Итак, у меня есть следующий код:

SslContextFactory sslContextFactory = new SslContextFactory();
sslContextFactory.setWantClientAuth(true);

Server server = new Server(pool);
ServerConnector sslConnector = new ServerConnector(server,
        new SslConnectionFactory(sslContextFactory, "HTTP/1.1"),
        new HttpConnectionFactory(httpsConfig));

server.addConnector(sslConnector);

Теперь мой сервис также имеет соответствующий веб-интерфейс.Когда пользователи получают доступ к веб-интерфейсу, который, в свою очередь, вызывает внутренние API-интерфейсы, браузер запрашивает у пользователя сертификат.Я не хочу, чтобы это произошло, потому что API, вызываемый веб-интерфейсом, не поддерживает аутентификацию сертификата.Однако приведенный выше код настраивается глобально.Есть ли способ решить эту проблему?

Обновление :

Я смотрел на другие реализации сервера.Например, в ASP.NET мы можем определить следующую конфигурацию:

<location path="some-api">
    <system.webServer>
        <security>
            <access sslFlags="SslNegotiateCert"/>
        </security>
    </system.webServer>
 </location>

Есть также аналогичные настройки в Apache Http Server

Так что похоже SSL / TLSсамо по себе не запрещает мне делать это.Есть какие-то настройки Jetty, которые я пропустил?

1 Ответ

0 голосов
/ 01 марта 2019

Проверка сертификата уровня TLS происходит до того, как HTTP-запрос будет даже отправлен / обработан / проанализирован.

Невозможно пропустить эту проверку на основе информации после рукопожатия TLS.

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

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