HttpServlet - Как узнать, используется ли аутентификация клиента SSL
У меня есть Servlet
Контейнер (Glassfish/OC4J), который обслуживает некоторые конечные точки веб-службы JAX-WS, которые могут быть достигнуты с помощью HTTPS. SSL настроен для поддержки как аутентификации клиента, так и аутентификации только на сервере (например, client-auth="want" на Glassfish).
В моей реализации конечной точки я хочу знать, было ли установлено соединение с аутентификацией клиента или без нее. У меня уже есть доступ к HttpServletRequest
объект, но getAuthType()
Метод всегда возвращает значение NULL, независимо от того, выполняется аутентификация клиента или нет (проверено с помощью wireshark, чтобы убедиться, что оно выполняет то, что я хочу).
Кто-нибудь знает, как получить доступ к такой информации?
большое спасибо
1 ответ
javax.servlet.request.X509Certificate
Атрибут запроса должен возвращать массив java.security.cert.X509Certificate.
Вы можете получить его по вашему запросу, используя:
X509Certificate[] certs = req.getAttribute("javax.servlet.request.X509Certificate");
Если не ноль, и если оно содержит что-то, первый элемент (certs[0]
) будет сам сертификат клиента. В этом массиве могут быть другие элементы, которые будут содержать промежуточные сертификаты CA (то, что представлено клиентом, может быть цепочкой сертификатов), где cert[i]
выдан cert[i+1]
,