Я пытаюсь настроить тестовую среду для нашего приложения, которое использует аутентификацию клиента X.509 через HTTPS в Tomcat 6.0.Код сервлета ожидает получить цепочку сертификатов в виде массива X509Certificate
объектов, используя javax.servlet.request.X509Certificate
запроса сервлета.Однако этот массив содержит только один элемент (сертификат клиента), где я ожидаю, что его будет два (сертификат клиента и сертификат корневого центра сертификации, который его подписал).
Вот что я сделалдо сих пор:
- Создание самозаверяющего сертификата CA с использованием openssl.
- Импорт сертификата CA в качестве доверенного корневого сертификата во вновь созданное хранилище ключей Java.
- Сконфигурируйте соединитель Tomcat HTTPS так, чтобы он требовал аутентификации клиента, используя хранилище ключей, созданное на шаге 2, в качестве хранилища доверенных сертификатов:
clientAuth="true"
truststoreFile="<path_to_truststore>"
- Создайте новый сертификат клиента с помощью openssl и подпишите его сертификатом CA.
- Запустите Tomcat.
- Установите сертификат клиента в Chrome и перейдите на домашнюю страницу моего сервера.Проходя по коду в отладке, я вижу, что массив, возвращенный как атрибут
javax.servlet.request.X509Certificate
, имеет только сертификат клиента.
Я знаю, что Tomcat выбирает сертификат корневого CA из хранилища доверенных сертификатов, потому чтокогда я удаляю его из хранилища доверенных сертификатов, я получаю ошибку соединения SSL.Он просто не попадает в запрос сервлета, как указано в документации.Я пропускаю какие-либо дополнительные настройки здесь?Возможно, Tomcat (или Java или JSSE) ожидает каких-то дополнительных расширений X509 V3 или чего-то еще?
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ
Похожемои настройки допустимы, и это относится к категории необычного, но ожидаемого поведения из-за упрощенной среды тестирования.В корпоративном сценарии маловероятно, что корневой центр сертификации будет напрямую подписывать клиентские сертификаты для отдельных пользователей.Ясно, что когда этот код был написан и протестирован, в цепочке доверия был задействован хотя бы один промежуточный ЦС.