Выполните вызов клиента SSL в Tomcat, используя хранилище ключей Tomcat - PullRequest
2 голосов
/ 19 марта 2012

В Tomcat запущено веб-приложение, которое выполняет вызов веб-службы в другую систему.Мне нужно защитить этот вызов с помощью SSL и аутентификации клиента.Tomcat, в котором я размещен, уже правильно настроен с хранилищем доверенных сертификатов и хранилищем ключей, специфичным для данной среды, поэтому мне нужно использовать эти хранилища для защиты своего собственного вызова.Вот где я застрял.

Как найти хранилище ключей и хранилище доверенных сертификатов, с которым настроен Tomcat, чтобы сделать мой собственный вызов SSL?Или, лучше, сгенерировать правильно настроенный SSLContext или SSLSocketFactory с этими значениями?

Вещи, которые я пробовал:

  1. Я пытался полагаться на SSLContext.getDefault ().Это, кажется, не установлено.

  2. Я пытался положиться на Системные свойства:

    System.getProperty("javax.net.ssl.trustStore");
    System.getProperty("javax.net.ssl.trustStorePassword");
    System.getProperty("javax.net.ssl.trustStoreType");
    System.getProperty( "javax.net.ssl.keyStore");
    System.getProperty( "javax.net.ssl.keyStorePassword");
    System.getProperty("javax.net.ssl.keyStoreType");
    

Но это кажется хрупким решением, поскольку Tomcat не долженнастроен с системными свойствами.В одной из тестовых сред информация хранилища доверия установлена, а переменные хранилища ключей - нет.Они определены в server.xml Tomcat.

Есть ли какой-то простой способ сделать это, что я пропускаю?

Обновлено:

Этот вопрос похож и один из ответов указывает на то, что SSL может обрабатываться OpenSSL \ APR, поэтому любое решение здесь будет сильно зависеть от конфигурации Tomcat.Предполагая JSSE, решения выглядят следующим образом:

  • Убедитесь, что Tomcat настроен через системные свойства.
  • Храните хранилища в предопределенном месте на сервере.
  • Упакуйте свои собственные копии магазинов в вашей войне.

Для первых двух выше, вы должны убедиться, что политика безопасности разрешает доступ к этим файлам.

Это действительно лучшие практики для того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 05 октября 2012

Я думаю, что помимо всего прочего вы путаете входящие и исходящие соединения SSL. Server.xml содержит параметры входящего SSL.

При использовании исходящего SSL в Java javax.net.ssl.trustStore * и javax.net.ssl.keyStore * должны быть явно установлены при запуске Tomcat. Помните, что по умолчанию хранилище ключей может содержать только один закрытый ключ, если только вы не написали свой собственный менеджер ключей.

Большинство известных библиотек веб-сервисов используют стандартные библиотеки HTTP, которые используют HTTPConnection / HTTPSConnection или Jakatta HTTPClient и предоставляют клиентский сертификат из хранилища ключей по запросу сервера. Вам не нужно создавать собственный SSLContext.

Если вы завершаете входящие вызовы Webservice, я бы использовал HTTP-сервер Apache с SSL и аутентификацию клиента, если это необходимо.

Изменить для ясности: хранилище ключей, указанное в javax.net.ssl.keyStore, может содержать более одной пары секретный ключ / сертификат, но вы не сможете использовать дополнительные секретные ключи / сертификат, если вы не напишите свой собственный KeyManager. Это может быть проблемой, когда вы завершаете входящие SSL-соединения в Tomcat - вам понадобится закрытый ключ / сертификат для внешних входящих соединений и другой закрытый ключ / сертификат для исходящих соединений.

...