Tomcat с односторонним и двусторонним SSL

У меня есть служба A, которая использует односторонний SSL, а также двусторонний SSL для выполнения безопасных запросов к службе B. Односторонний SSL указан в конфигурации Tomcat, я предоставляю keystoreFile, keystorePass, включаю SSL и т. д. Двусторонний SSL реализуется с помощью JSSE на клиенте (сервис A). Я знаю, что это можно сделать аналогичным образом и в Tomcat server.xml (пример здесь: http://blog1.vorburger.ch/2006/08/setting-up-two-way-mutual-ssl-with.html).

Часть моей односторонней конфигурации SSL Tomcat:

<Connector port="securePort"
           scheme="https"
           secure="true"
           clientAuth="false"
           sslProtocol="TLS"
           SSLEnabled="true"
           keystoreFile="keystoreFile"
           keystorePass="keystorePass"
           keystoreType="keystoreType"
           ...
/>

Есть ли способ указать как односторонний, так и двусторонний (на стороне клиента) SSL для одной и той же службы в Tomcat. Проблема здесь в том, что я использую 2 сертификата (серверный и клиентский) на одном и том же IP-адресе. Любые подсказки?


person agerrr    schedule 05.09.2013    source источник


Ответы (2)


Когда служба A отправляет SSL-запросы с аутентификацией клиента службе B, это не сервер, а клиент. Это не имеет ничего общего с настройкой аутентификации клиента на вашем сервере Tomcat, где работает служба A.

То, как ваша служба A получает настройки своего хранилища ключей (которое она использует в качестве клиента), зависит от того, как она реализована и какие библиотеки она использует для установления этих соединений. Он не особенно отличается от любого отдельного клиента.

Вполне вероятно, что он по крайней мере подберет настройки по умолчанию через свойства системы. Вы можете установить системные свойства javax.net.ssl.keyStore (и связанные с ними) в контейнере (например, через JAVA_OPTS в catalina.sh или .bat). Однако эти настройки будут использоваться всеми веб-приложениями, работающими в вашем контейнере (но эти настройки не будут использоваться вашей конфигурацией <Connector/>, если вы настроили там другое хранилище ключей). Такое воздействие на все веб-приложения в вашем контейнере не всегда может быть желательным.

У вас также может быть файл хранилища ключей, куда ваш клиентский код может его загрузить (например, где-то под WEB-INF) и загрузить это хранилище ключей как поток ресурсов для инициализации SSLContext, используемого вашей клиентской библиотекой (если ваше клиентское приложение может использовать такие настройки). Другой возможный способ — передать хранилище ключей через JNDI. Все это зависит от того, как вы хотите настроить развертывание службы и как предполагается настроить ее код.

person Bruno    schedule 05.09.2013

Я надеюсь, что это ваш сценарий

Служба A ---> односторонний запрос SSL к конечной точке Служба B ---> двусторонний запрос SSL к конечной точке Коннектор Tomcat, настроенный с двусторонним SSL

Поскольку коннектор tomcat настроен на двусторонний SSL, все входящие соединения будут проверяться на рукопожатие; это означает, что если нет ключа для односторонней конечной точки ssl, рукопожатие завершится ошибкой. Чтобы преодолеть это, вам нужно импортировать 1-сторонний сертификат конечной точки ssl в хранилище доверенных сертификатов.

Теперь будет работать как 1-сторонний, так и 2-сторонний SSL.

person webjockey    schedule 18.10.2016