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

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

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

Я могу отправить дамп отладки ssl, если это необходимо.

1 ответ

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

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

Самое простое - настроить 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, делающий те запросы, используют это.

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