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],

Другие вопросы по тегам