Назад | Перейти на главную страницу

Как веб-приложения в Apache Tomcat могут использовать аутентификацию SSL / TLS с сертификатом клиента в качестве клиентов?

Я использую веб-приложение Apache Tomcat в качестве клиента (java) для веб-службы, размещенной на IIS. Мне нужно использовать SSL с аутентификацией клиента. Какие критерии соответствия используются клиентом для отправки сертификата клиента на сервер как часть CertificateRequest, который является частью ServerHello.

Я установил сертификат клиента в IE и получил доступ к WSDL, затем он запрашивает сертификат клиента, и я выбираю тот, который я установил, и он работает.

При необходимости могу отправить отладочный ssl-дамп.

В конечном итоге сертификат будет отправлен с использованием механизма в X509KeyManager используется в SSLContext используется SSLSocket/SSLEngine используется клиентом.

По умолчанию SSLContext инициализирует свой менеджер ключей, используя javax.net.ssl.keyStore* свойства системы. (Видеть этот ТАК ответ для разницы между "хранилищем ключей" и "хранилищем доверенных лиц": оба используют формат API / хранилища "хранилища ключей".)

Самый простой - настроить JVM под управлением Tomcat, в котором работает ваш клиент / веб-приложение, с этими javax.net.ssl.keyStore* свойства. По умолчанию SSLContext заберет его, и он используется по умолчанию для HTTPS-соединений (даже сторонние HTTPS-библиотеки будут его использовать).

Если вам нужно что-то более конкретное для конкретных запросов, вам может потребоваться изменить код веб-приложения, чтобы использовать конкретное хранилище ключей (или, по крайней мере, выбрать конкретный сертификат) в заданном SSLContext для этого запроса.

Как вы настраиваете JVM, на которой запущен Tomcat, будет зависеть от сценария запуска. Если под Windows, этот вопрос должен помочь, иначе я подозреваю, что где-то в catalina.sh где вы можете установить свойства системы.

Если вы все же настроите глобальный javax.net.ssl.keyStore* для этого это повлияет на всю виртуальную машину, включая соединители. Чтобы соединители Tomcat не использовали это хранилище ключей, убедитесь, что <Connector /> конфигурация указывает собственное keyStore* атрибуты (чтобы не использовать значения из свойств системы).

Если в вашем хранилище ключей есть несколько сертификатов (с закрытым ключом), выбор должен быть сделан автоматически в соответствии со списком CA, отправленным сервером в его CertificateRequest сообщение. По умолчанию диспетчер ключей выбирает первый сертификат, который он найдет в настроенном хранилище ключей, который выдается ЦС из этого списка (или промежуточным ЦС). Если вам нужно что-то более конкретное (в частности, если в вашем хранилище ключей есть несколько допустимых кандидатов), вам нужно будет реализовать свой собственный X509KeyManager, поместите логику в chooseClientAlias, инициализировать SSLContext с ним, и пусть любой API, который делает эти запросы, использует его.