HttpServlet - Как узнать, используется ли аутентификация клиента SSL - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть контейнер Servlet (Glassfish / OC4J), который обслуживает некоторые конечные точки веб-службы JAX-WS, к которым можно обратиться по HTTPS. SSL настроен для поддержки как аутентификации клиента, так и аутентификации только на сервере (например, client-auth = "want" на Glassfish).

В моей реализации конечной точки я хочу знать, было ли соединение установлено с аутентификацией клиента или без нее. У меня уже есть доступ к объекту HttpServletRequest, но метод getAuthType() всегда возвращает ноль, независимо от того, выполняется аутентификация клиента или нет (проверено с помощью wireshark, чтобы убедиться, что оно выполняет то, что я хочу).

Кто-нибудь знает, как получить доступ к такой информации?

Большое спасибо

1 Ответ

5 голосов
/ 14 декабря 2011

Атрибут запроса javax.servlet.request.X509Certificate должен возвращать массив java.security.cert.X509Certificate .

Вы можете получить его по вашему запросу, используя:

X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");

Если не ноль, и если оно содержит что-то, первым элементом (certs[0]) будет сам сертификат клиента. В этом массиве могут быть другие элементы, которые будут содержать промежуточные сертификаты CA (то, что представлено клиентом, может быть цепочкой сертификатов), где cert[i] выдается cert[i+1].

...