Раздел 1. Перед началом работы
Цели
Цель данного руководства - научить вас конфигурировать при помощи интегрированной среды разработки Rational Application Developer 7.5.2 защиту на уровне сообщений для JAX-WS Web-сервисов, выполняющихся на WebSphere Application Server 7. Чтобы достичь ее, мы научим вас решать следующие задачи:
- Как создать поставщика JAX-WS сервиса при помощи аннотаций.
- Как создать автономный JAX-WS клиент.
- Как исследовать SOAP-сообщения при помощи TCP/IP Monitor.
- Как настроить набор политик WS-Security в консоли WebSphere Application Server Administration Console.
- Как настроить связывание набора политик в консоли Administration Console.
- Как экспортировать наборы политик и связывания из консоли Administration Console.
- Как создать асимметричные ключи X509 и использовать их с настроенными вами связываниями наборов политик.
- Как импортировать наборы политик и связывания в интегрированную среду разработки Rational Application Developer.
- Как прикрепить наборы политик к клиентам Web-сервисов и серверам при помощи интегрированной среды разработки Rational Application Developer.
- Как настроить связывание набора политик на стороне клиента при помощи интегрированной среды разработки Rational Application Developer.
- Как использовать профиль UsernameToken (UNT) для добавления учетных данных в SOAP-заголовок.
- Как использовать для аутентификации профиль UNT вместо репозитория пользователей WebSphere Application Server.
О примере
Чтобы не отвлекаться от главной цели руководства - наглядно продемонстрировать защиту на уровне сообщений - мы рассмотрим простой пример "HelloWorld".
Предварительные требования
Несмотря на то, что в руководстве приведены очень подробные пошаговые инструкции, оно предназначено для Java-программистов, знакомых с концепциями Web-сервисов. Руководство написано максимально наглядно и не требует загрузки какого-либо кода или выполнения каких-либо магических действий, скрытых в предварительно подготовленных файлах. Если вы хотите на практике поработать с предоставленным кодом примера, необходимо установить Rational Application Developer for WebSphere Software V7.5.2. Кроме того, необходимо установить тестовую среду WebSphere Application Server V7.0, которая поставляется в пакете с Rational Application Developer 7.5.2.
Поскольку существует много литературы по JAX-WS и Web-сервисам в целом, мы не будет останавливаться на них, чтобы уменьшить размер данного руководства. Однако мы рекомендуем следующую литературу по Web-сервисам и использованию JAX-WS:
Раздел 2. Введение в защиту на уровне сообщений
Защита на транспортном уровне (например, HTTPS) представляет собой модель безопасности "точка-точка", в которой защищается канал между двумя сторонами. Однако во многих случаях поставщика и потребителя сервиса разделяют посредники (например, Enterprise Service Bus - корпоративная сервисная шина). В подобных ситуациях сквозное решение по обеспечению безопасности может быть реализовано при помощи защиты на уровне сообщений. На рисунке 1 показано, как защита на уровне сообщений позволяет реализовать сквозное решение по обеспечению безопасности даже при наличии посредников между потребителем и поставщиком. Секрет состоит в том, в случае защиты на уровне сообщений можно зашифровать сообщение с использованием открытого ключа места назначения. Таким образом, только предполагаемый получатель сможет дешифровать сообщение. Кроме того, зашифровав сообщение и поместив в него зашифрованные данные, можно сохранить сообщение в файловой системе для асинхронной передачи с последующим дешифрованием, когда будет доступен получатель. Это лишь некоторые причины того, что защита на уровне сообщений часто применяется для обеспечения безопасности Web-сервисов.
Рисунок 1. Сравнение защиты на транспортном уровне и защиты на уровне сообщений
Web Services Security (WS-Security) - это стандарт OASIS для реализации защиты на уровне сообщений в отношении Web-сервисов. В частности, WS-Security описывает, как реализовать в SOAP-сообщении конфиденциальность (например, шифрование), целостность (например, цифровые подписи) и аутентификацию (например, имя пользователя и пароль). В большинстве случаев в качестве механизмов обеспечения безопасности сообщения используются XML-шифрование и XML-подписи; WS-Security описывает применение этих технологий в отношении Web-сервисов для обеспечения защиты на уровне сообщений, а также предоставления инфраструктуры для передаваемых защищенных данных. Рисунок 2 показывает, как выглядит защита на уровне сообщений в SOAP-сообщении. В данном руководстве описывается построение SOAP-сообщений, в результате шифрования и подписывания становятся похожи на сообщение, приведенное на рисунке 2.
Рисунок 2. Пример защиты на уровне сообщений SOAP-сообщения
Раздел 3. Создание и использование JAX-WS Web-сервисов
В этом разделе вы создадите простой Web-сервис HelloWorld при помощи аннотирования JAX-WS и инструментария Rational Application Developer. Затем вы примените инструментарий Rational Application Developer, чтобы создать прокси-клиент для вызова Web-сервиса. Наконец, вы протестируете вашего поставщика сервиса (т.е. Web-сервис) в тестовой среде WebSphere Test Environment (WTE), которая поставляется в пакете с Rational Application Developer. В процессе тестирования вы исследуете SOAP-сообщения (т.е. запрос и ответ) при их появлении в сети.
Создание поставщика сервиса JAX-WS
В руководстве будет использован динамический Web-проект, содержащий Web-сервис. Начнем с создания динамического Web-проекта и простого Java-объекта в старом стиле (Plain Old Java Object - POJO) для поставщика сервиса, выполнив следующие действия:
- Запустите Rational Application Developer 7.5.2. Выберите File > New > Dynamic Web Project, а затем в качестве имени проекта введите
HelloWorldProject
, как показано на рисунке 3.
Рисунок 3. Создание динамического Web-проекта
-
Примите значения по умолчанию для других полей, а затем нажмите кнопку Finish. Выберите No, если вам будет предложено изменить Web-перспективу. В данном руководстве вы будете использовать перспективу Java EE.
- Выберите проект HelloWorldProject в окне проводника проектов. Щелкните правой кнопкой мыши и выберите New > Class, после чего отобразится мастер New Java Class, как показано на рисунке 4.
Рисунок 4. Мастер создания нового Java-класса
-
Введите com.ibm.dwexample
в качестве имени пакета и HelloWorldProvider
в качестве имени класса, а затем нажмите кнопку Finish.
- Скопируйте код листинга 1 в файл
HelloWorldProvider.java
и сохраните его.
Листинг 1. Файл HelloWorldProvider.java
package com.ibm.dwexample;
import javax.jws.WebService;
@WebService
public class HelloWorldProvider {
public String sayHello(String msg) {
System. out .println("[helloworld provider] Hello " + msg);
return "Hello " + msg;
}
}
|
Вот и все! Простой POJO-объект с аннотацией @WebService
- это все, что нужно для создания JAX-WS Web-сервиса.
Создав Web-сервис, вы можете использовать Rational Application Developer для развертывания его в тестовой среде WebSphere Test Environment (WTE).
Для развертывания сервиса:
- Выберите файл HelloWorldProvider.java, содержащий код листинга 1. Щелкните правой кнопкой мыши и выберите Run As > Run on Server, после чего отобразится мастер Run On Server, как показано на рисунке 5.
Рисунок 5. Мастер Run On Server
-
Отметьте переключатель Choose an existing server, а затем выберите WebSphere Application Server V7.0 at localhost. Если сервер WebSphere Application Server V7 не определен, определите его, для чего откройте папку IBM, выберите WebSphere Application Server v7.0 и укажите Manually define a new server.
-
Нажмите кнопку Finish, чтобы развернуть и запустить Web-сервис на WebSphere Application Server.
На данный момент вы создали простой JAX-WS Web-сервис, развернули и запустили его в тестовой среде. Теперь вы создадите JAX-WS клиент, который сможет вызвать выполняющийся Web-сервис.
Создание потребителя сервиса JAX-WS
В Rational Application Developer V7.5.2 есть мастер для создания клиента из JAX-WS Web-сервиса. В данном руководстве в качестве потребителя сервиса вы будете использовать автономный Java-клиент. Однако вначале создайте простой Java-проект, который будет содержать прокси-клиент JAX-WS, а также клиентский код, использующий сгенерированный прокси-клиент.
Чтобы создать Java-проект:
-
В Rational Application Developer выберите File > New > Other. Выберите мастер Java Project и нажмите кнопку Next.
- В мастере New Java Project в качестве имени проекта введите
HelloWorldConsumer
и нажмите кнопку Finish, как показано на рисунке 6. Если вам будет предложено переключиться в перспективу Java, выберите No, чтобы остаться в перспективе Java EE.
Рисунок 6. Мастер New Java Project
Теперь, когда у вас есть Java-проект для хранения прокси-классов JAX-WS, созданных при помощи Rational Application Developer, можно с помощью Rational Application Developer создать классы прокси-клиента.
- Откройте папку Services Web-проекта HelloWorldProject. Щелкните правой кнопкой мыши на сервисе {http://dwexample.ibm.com/}HelloWorldProviderService и выберите Generate > Client, как показано на рисунке 7.
Рисунок 7. Создание клиента Web-сервиса
-
Убедитесь, что в разделе настроек для Web service runtime установлено значение IBM WebSphere JAX-WS, а в качестве типа клиента выбран Java Proxy.
- Нажмите Client project:; эта ссылка позволяет выбрать в качестве проекта клиента созданный ранее автономный Java-проект, как показано на рисунке 8.
Рисунок 8. Мастер Web Service Client
- Выберите HelloWorldConsumer в качестве проекта клиента для создания Java-прокси, а затем нажмите OK, как показано на рисунке 9.
Рисунок 9. Определение Client project для прокси
- Нажмите кнопку Next и введите
com.ibm.dwexample.clientproxy
в качестве целевого пакета клиента Web-сервиса. Убедитесь, что отмечен флажок Ensure the Generate portable client, как показано на рисунке 10. Желательно отделить созданный код от клиентского кода с помощью другого имени пакета для кода прокси, как показано на рисунке 10.
Рисунок 10. Мастер Web Service Client Configuration
- Для создания кода прокси-клиента (см. рисунок 11) нажмите кнопку Finish.
Рисунок 11. Сгенерированные классы прокси-клиента
Rational Application Developer на основании WSDL поставщика сервиса автоматически создает Java-классы, которые могут вызывать Web-сервис поставщика сервиса. Сгенерированные классы показаны на рисунке 11. Использование сгенерированных прокси-классов позволяет не беспокоиться о создании SOAP-сообщения, XML-анализе и других программных конструкциях - сгенерированные классы сделают это за вас. Нужно только создать экземпляр прокси-клиента и вызвать методы, которые вы хотите передать в Web-сервис. Затем создайте простой тестовый Java-клиент, который создает экземпляр сгенерированного прокси-клиента для вызова поставщика сервиса.
Чтобы создать тестовый Java-клиент:
-
Щелкните правой кнопки мыши на проекте HelloWorldConsumer и выберите New > Class.
- Введите
com.ibm.dwexample
в качестве пакета для клиента и ClientTest
в качестве имени Java-класса, как показано на рисунке 12. Обратите внимание, что клиентский код отделяется от сгенерированного прокси-клиента с помощью другого имени Java-пакета.
Рисунок 12. Мастер New Java Class
- Нажмите кнопку Finish. Скопируйте код листинга 2 в файл ClientTest.java и сохраните его.
Листинг 2. Файл ClientTest.java
1 package com.ibm.dwexample;
2 import com.ibm.dwexample.clientproxy.HelloWorldProvider;
3 import com.ibm.dwexample.clientproxy.HelloWorldProviderService;
4 public class ClientTest {
5 public static void main(String[] args) {
6 try {
7 HelloWorldProviderService srv = new HelloWorldProviderService();
8 HelloWorldProvider port = srv.getHelloWorldProviderPort();
9 String resp = port.sayHello("World");
10 System.out.println("[response] " + resp);
11 } catch(Exception e) {
12 e.printStackTrace();
13 }
14 }
15 }
|
Строка 7 листинга 2 создает экземпляр сервиса прокси-клиента, сгенерированного при помощи Rational Application Developer. В строке 8 сгенерированный интерфейс (например, HelloWorldProvider
) используется для получения дескриптора порта Web-сервиса. Наконец, для вызова метода sayHello()
, который осуществляет удаленный вызов поставщика Web-сервиса, используется объект port. Вызов port.sayHello("World")
отправляет SOAP-запрос прослушиваемому поставщику Web-сервиса, приведенному в листинге 1. Затем поставщик сервиса возвращает клиенту ответное SOAP-сообщение. Давайте исследуем SOAP-запрос и SOAP-ответ при помощи встроенного представления TCP/IP Monitor, предоставляемого Rational Application Developer.
Тестирование и проверка потребителя и поставщика
К TCPMON также можно обратиться из WebSphere. Для его вызова используйте следующую команду:
java -cp com.ibm.ws.webservices.thinclient_7.0.0.jar com.ibm.ws.webservices.engine.utils.tcpmon
После подготовки к работе стороны сервера и стороны клиента желательно выполнить тестирование и проверку. В Rational Application Developer есть представление TCP/IP Monitor для отображения SOAP-сообщения при его передаче от клиента на сервер и обратно. Чтобы использовать это представление, необходимо настроить TCP/IP Monitor на прослушивание неиспользуемого TCP/IP порта, а затем изменить код прокси-клиента, указав в нем данный TCP/IP-порт. В данном разделе объясняется, как это сделать.
-
В Rational Application Developer выберите Window > Show View > Other. Затем в папке Debug выберите представление TCP/IP Monitor и нажмите OK.
- Щелкните правой кнопкой мыши в первой области ввода и нажмите Properties, как показано на рисунке 13.
Рисунок 13. Представление TCP/IP Monitor
-
Нажмите кнопку Add, чтобы настроить новый монитор для перехвата запроса и ответа Web-сервиса и отображения SOAP-сообщения.
-
Введите неиспользуемый TCP порт в поле Local monitoring port (например, 9081
).
-
Введите localhost
в поле Host Name.
- Введите TCP порт для поставщика Web-сервиса (смотрите WSDL-файл в проекте HelloWorldConsumer), например
9080
. Ваши значения должны соответствовать рисунку 14:
Рисунок 14. Настройки New Monitor
-
Нажмите кнопку OK.
- Теперь выберите только что определенный TCP/IP Monitor и нажмите кнопку Start, как показано на рисунке 15:
Рисунок 15. Запуск TCP/IP Monitor
Теперь, когда TCP/IP Monitor запущен и прослушивает вызовы Web-сервиса, необходимо перенастроить прокси-клиент с прямого подключения к поставщику сервиса на прослушивание порта TCP/IP монитора. Это можно сделать, изменив номер порта в WSDL-файле, который был сохранен локально в проекте клиента, когда был отмечен флажок Generate portable client, как показано на рисунке 10.
-
Щелкните правой кнопкой мыши на файле HelloWorldProviderService.wsdl, расположенном в проекте HelloWorldConsumer (путь к папке - src > META-INF > wsd), и выберите Open With > WSDL Editor.
- Измените номер порта на порт прослушивания TCP/IP Monitor (например,
9081
), как показано на рисунке 16, а затем сохраните и закройте WSDL-файл.
Рисунок 16. WSDL Editor
- Щелкните правой кнопкой мыши на файле ClientTest.java и выберите Run As > Java Application. Результаты будут отображаться в представлении TCP/IP Monitor, как показано на рисунке 17.
Рисунок 17. Результаты ClientTest
К этому моменту вы разработали поставщика JAX-WS Web-сервиса (т.е. сторону сервера) и потребителя JAX-WS Web-сервиса (т.е. сторону клиента), а также отобразили результаты вызова поставщика потребителем. В следующем разделе вы настроите наборы политик с целью дополнить пример HelloWorld
защитой на уровне сообщений и еще раз исследуете представление TCP/IP Monitor, чтобы убедиться, что SOAP-сообщение передается безопасно.
Раздел 4. Наборы политик
Наборы политик предоставляют декларативный способ определения качества обслуживания (Qualities of Service - QoS) для Web-сервисов. Это упрощает управление несколькими Web-сервисами, поскольку наборы политик можно использовать повторно. Давайте обсудим терминологию:
- Политика. Политика описывает конфигурацию, которая определяет QoS для Web-сервисов. Примерами являются WS-Security и WS-Addressing.
- Наборы политик. Набор политик - это коллекция политик.
- Прикрепление набора политик. В случае применения к Web-сервисам наборов политик эти наборы необходимо прикрепить.
- Связывания. Наборы политик предназначены для повторного использования в Web-сервисах и поэтому не содержат специфичных для среды данных, таких как хранилища ключей или пароли. Напротив, связывание содержит такие специфичные для среды значения.
Рисунок 18. Пример наборов политик
В состав WebSphere Application Server V7 входят 18 наборов политик (см. рисунок 18), упрощающих начало работы. Это наборы политик уровня производства, которые можно использовать незамедлительно. Также WebSphere Application Server V7 включает в себя 4 эталонных связывания, но только для демонстрационных целей. Для рабочих Web-сервисов необходима настройка связывания наборов политик, которая демонстрируется в данном руководстве.
Rational Application Developer 7.5.2 также поставляется с комплектом наборов политик. Rational Application Developer 7.5.2 полностью поддерживает требуемые для наборов политик связывания на стороне клиента. Однако связывания наборов политик на стороне сервера необходимо настраивать на сервере WebSphere Application Server V7. WebSphere Application Server V7 поддерживает экспорт наборов политик и связываний наборов политик, так что их можно импортировать в Rational Application Developer 7.5.2. После импорта в Rational Application Developer наборы политик и связывания наборов политик можно прикрепить к поставщику сервиса (т.е. серверу) и к потребителю сервиса (т.е. клиенту), используя мастер в Rational Application Developer.
Настройка асимметричных ключей
"Криптография с открытым ключом, также известная как асимметричная криптография, - это вид криптографии (EN), в котором ключ, используемый при шифровании сообщения, отличается от ключа, используемого при его дешифровании. В криптографии с открытым ключом пользователь имеет пару криптографических ключей (EN) - открытый ключ и закрытый ключ. Закрытый ключ хранится в секрете, а открытый ключ можно распространять свободно. Входящие сообщения шифруются (EN) с использованием открытого ключа получателя, а дешифруются только с использованием соответствующего закрытого ключа. Ключи математически связаны, но закрытый ключ невозможно получить из открытого ключа".
Асимметричные ключи можно использовать для защиты Web-сервисов. В данном разделе вы узнаете, как создать набор криптографических ключей, а затем использовать его для защиты своего Web-сервиса. Перед началом работы будет полезно познакомиться со следующей терминологией:
- Открытый ключ. Этот ключ используется другими людьми, чтобы зашифровать данные для вас.
- Закрытый ключ. Этот ключ соответствует вашему открытому ключу и используется при дешифровании данных, зашифрованных другими людьми с помощью вашего открытого ключа. Этот ключ не должен быть известен никому.
- Центр сертификации (Certificate Authority - CA). Чтобы другие люди были уверены в том, что ваш открытый ключ принадлежит именно вам, обычно вы обращаетесь в центр сертификации (например, Verisign, GeoTrust, GoDaddy), чтобы подписать ваш ключ. Поскольку другие люди поступают так же, вы можете доверять им, т.к. центр сертификации ручается за вас и за них.
- Цифровой сертификат. Чтобы сделать ваш открытый ключ доступным для других людей и чтобы они были уверены в том, что вы тот, за кого себя выдаете, вы создаете цифровой сертификат, содержащий ваш открытый ключ и вашу идентификационную информацию (например, ваше имя), после чего отправляете этот цифровой документ в центр сертификации для подписания.
- Хранилище ключей. Это место, где хранятся ваши ключи. Его также называют "брелоком для ключей" (key ring).
- Сертификат подписчика. Ваш цифровой сертификат, подписанный центром сертификации, называется сертификатом подписчика. Цифровой сертификат, сертификат открытого ключа и сертификат подписчика часто используются как синонимы.
Создание ключей поставщика сервиса
Есть несколько инструментов для создания пар открытого и закрытого ключей, но в данном руководстве используется предоставляемая Java Development Kit (JDK) команда keytool
, поскольку ее можно использовать с автономными клиентами и с WebSphere Application Server.
Сначала вы создадите ключи на стороне сервера, которые будет использовать поставщик сервиса (т.е. сторона сервера), выполняющийся на WebSphere Application Server V7. Затем вы создадите ключи на стороне клиента для потребителя сервиса, который запускается как автономный клиент из Rational Application Developer V7.5.2. Мы намеренно отделяем серверные ключи от клиентских ключей, чтобы подчеркнуть отличия и имитировать производственную среду, в которой потребитель и поставщик зачастую физически находятся на разном оборудовании. Иными словами, закрытый ключ остается у владельца и не подлежит распространению.
Сначала вы должны создать хранилище для ваших открытых и закрытых ключей. Эта задача решается при помощи следующей команды keytool
:
-
В Microsoft Windows выберите Start > Run…, затем введите cmd
в поле Open диалогового окна и нажмите OK.
-
В окне Command Prompt укажите каталог, в котором установлен WebSphere Application Server V7 (например, cd c:\Program Files\IBM\SDP\runtimes\base_v7
).
-
Теперь выполните следующую команду keytool
:
java\bin\keytool.exe -genkey -v -alias server1 -keyalg RSA
-keystore helloServerKeys.jks -storepass f00bar
-dname "cn=server1,O=IBM,C=US" -keypass passw0rd
|
Эта команда сгенерирует пару из открытого и закрытого ключей, которая будет доступна под псевдонимом server1. Кроме того, эта команда сама подпишет открытый ключ. Закрытый и открытый ключи хранятся в файле helloServerKeys.jks
, который защищен паролем.
-
Далее, вы должны экспортировать сертификат server1, чтобы позднее импортировать его в ваш брелок на стороне клиента при помощи следующей команды keytool
:
java\bin\keytool.exe -export -v -alias server1 -file c:\temp\server1.cert -rfc
-keystore helloServerKeys.jks -storepass f00bar
|
Кому-то (или некоторым компьютерам) может потребоваться ваш открытый ключ, чтобы зашифровать сообщения для вас. Потом вы сможете дешифровать сообщение при помощи вашего закрытого ключа. Однако вам нужно как-то извлечь открытый ключ из хранилища и отправить его в некотором формате стороне, с которой хотите общаться безопасно. Это делается с помощью аргумента export
приведенной выше команды keytool
, которая сохраняет открытый ключ в формате цифрового сертификата X509 в текстовом файле c:\temp\server1.cert
. Этот сертификат открытого ключа импортируется затем в хранилище ключей потребителя сервиса (т.е. на стороне клиента), так что потребитель сервиса будет знать, как зашифровать сообщения для поставщика сервиса.
На рисунке 19 показаны команды, используемые для создания ключей поставщика сервиса:
Рисунок 19. Создание ключа поставщика сервиса
Создание ключей потребителя сервиса
Теперь, когда ключи на стороне сервера созданы, вы создадите хранилище ключей на стороне клиента. Обратите внимание, что это совершенно другой набор ключей, не имеющий никакого отношения к ключам на стороне сервера. Доверительные отношения устанавливаются только при обмене ключами с соответствующим хранилищем. В наших ключах используются названия разных организаций (IBM
в server1
и ACME
в myclient
), чтобы продемонстрировать, что ключи могут быть предоставлены самыми разными организациями и не обязательно должны быть созданы одним центром авторизации.
Как и в случае ключей на стороне сервера, вы можете применить команду keytool
для создания хранилища ключей на стороне клиента. Обратите внимание, что вы будете использовать команду keytool
, поставляемую с Rational Application Developer V7.5.2, а не keytool
сервера WebSphere Application Server, поскольку эти команды запускаются из разных каталогов:
-
В Microsoft Windows выберите Start > Run…, затем введите cmd
в поле Open диалогового окна и нажмите OK.
-
В окне Command Prompt укажите каталог, в котором установлен Rational Application Developer 7.5.2 (например, cd c:\Program Files\IBM\SDP
).
- Теперь выполните следующую команду
keytool
:
jdk\bin\keytool.exe -genkey -v -alias myclient -keyalg RSA
-keystore myclientKeys.jks -storepass g00ber
-dname "cn=myclient,O=ACME,C=US" -keypass p@ssword
|
Аналогично тому, как мы использовали эту команду для создания пары из открытого и закрытого ключей поставщика сервиса, теперь мы используем с помощью этой же команды создадим хранилище ключей потребителя с соответствующим набором из открытого и закрытого ключей, который будет доступен под псевдонимом myclient. Как и в случае с ключами поставщика сервиса, эта команда создает самоподписанный открытый сертификат, содержащий открытый ключ. Однако обратите внимание, что ключи потребителя сервиса (т.е. стороны клиента) сохраняются в файле myclientKeys.jks
.
- Для организации уровня доверия между поставщиком и потребителем сервиса необходимо экспортировать сертификат клиента, чтобы затем импортировать его в хранилище ключей поставщика сервиса. Это делает следующая команда
keytool
:
jdk\bin\keytool.exe -export -v -alias myclient -file c:\temp\myclient.cert
-rfc -keystore myclientKeys.jks -storepass g00ber
|
Данная команда импортирует сертификат открытого ключа в хранилище ключей поставщика сервиса (т.е. на стороне сервера), так что поставщик сервиса будет знать, как зашифровать сообщения для потребителя.
- Затем открытый ключ на стороне сервера импортируется в хранилище ключей на стороне клиента при помощи следующей команды
keytool
:
jdk\bin\keytool.exe -import -v -noprompt -alias server1 -file c:\temp\server1.cert
-keystore myclientKeys.jks -storepass g00ber
|
Напомним, что ранее вы экспортировали открытый ключ псевдонима server1, который назначен паре ключей, ассоциированной с поставщиком сервиса. Теперь вам нужно импортировать этот открытый ключ в хранилище ключей на стороне клиента (т.е. myclientKeys.jks
). Затем, когда потребитель сервиса (т.е. сторона клиента) захочет зашифровать сообщение для поставщика сервиса, конфигурация WS-Security, ассоциированная с клиентом, укажет открытый ключ псевдонима server1 в хранилище ключей клиента.
На рисунке 20 показаны все приведенные выше команды для создания ключей на стороне клиента:
Рисунок 20. Создание ключей на стороне клиента при помощи keytool
Импорт ключей потребителя сервиса
Напомним, что во время создания ключа поставщика сервиса вы еще не создали ключи потребителя сервиса для экспорта и импорта в хранилище ключей поставщика сервиса. Теперь, когда вы создали ключи и сертификаты на стороне клиента и экспортировали открытый ключ для использования потребителем сервиса, можно импортировать этот ключ в хранилище ключей поставщика сервиса.
- Следующая команда
keytool
позволяет импортировать открытый ключ в хранилище ключей:
java\bin\keytool.exe -import -v -noprompt -alias myclient
-file c:\temp\myclient.cert -keystore helloServerKeys.jks
-storepass f00bar
|
Убедитесь, что выполняете эту команду из каталога WebSphere Application Server V7 (т.е. c:\Program Files\IBM\SDP\runtimes\base_v7
).
Теперь, когда хранилище ключей поставщика сервиса готово, скопируйте его в каталог конфигурации ячейки среды исполнения WebSphere Application Server V7, чтобы ваши ключи были доступны во всех узлах кластера кластеризованной среды. Такое размещение также будет работать для конфигурации с автономным сервером. В приведенной ниже конфигурации связываний наборов политик вы будете указывать это хранилище ключей.
-
Скопируйте хранилище ключей поставщика сервиса из каталога WebSphere Application Server V7 в следующий каталог:
copy helloServerKeys.jks profiles\<profile name>\config\cells\<cell name>
|
Путь на моей машине - C:\Program Files\IBM\SDP\runtimes\base_v7\profiles\was70profile1\config\cells\griffith-t60pNode01Cell\MyKeys
.
Теперь у вас есть ключи клиента и сервера с импортированными сертификатами друг друга. Вы будете использовать эти ключи в конфигурации набора политик WSSecurity для обеспечения шифрования и подписания.
Создание набора политик
WebSphere Application Server V7 позволяет создавать наборы политик с нуля, обеспечивая максимальную гибкость, но WebSphere Application Server V7 также поставляется с большим количеством предварительно настроенных наборов политик для упрощения их создания. Очень часто предварительно настроенных наборов политик более чем достаточно для большинства нужд, поэтому рекомендованным подходом является копирование одного из встроенных наборов политик и его модификация, что зачастую проще, чем начинать с нуля. В данном руководстве будет скопирован набор политик по умолчанию Username WSSecurity.
В набор политик по умолчанию Username WSSecurity входят политики WSSecurity и WSAddressing. В этих политиках задается обеспечение целостности сообщения посредством цифровой подписи тела сообщения, временной отметки, заголовков адресации и маркера username. Конфиденциальность сообщения обеспечивают шифрование тела сообщения, подпись и маркер username. Наконец, в этих политиках задается аутентификация сообщения посредством использования маркера username. Вся работа по указанию частей сообщения, подлежащих подписанию и шифрованию, выполняется за вас при копировании набора политик по умолчанию Username WSSecurity.
Rational Application Developer 7.5.2 позволяет прикреплять наборы политик и настраивать связывания на стороне клиента, но не дает возможности настраивать наборы политик.
Для создания и настройки набора политик необходимо открыть консоль Administration Console сервера WebSphere Application Server. В данном руководстве используется WebSphere Application Server, установленный в Rational Application Developer.
- В Rational Application Developer щелкните правой кнопкой мыши на среде исполнения WebSphere Application Server V7 в представлении Servers и выберите Administration > Run administrative console, как показано на рисунке 21. Предварительно убедитесь, что среда исполнения WebSphere Application Server V7 запущена, иначе пункт меню Run administrative console будет недоступен.
Рисунок 21. Запуск Administration Console в Rational Application Developer
- В Administrative Console выберите Services > Policy sets > Application policy sets, как показано на рисунке 22.
Рисунок 22. Наборы политик приложения
- Отметьте флажок рядом с Username WSSecurity default и нажмите кнопку Copy….
Набор политик по умолчанию Username WSSecurity шифрует тело SOAP-сообщения, подпись и маркер Username. Кроме того, набор политик по умолчанию Username WSSecurity подписывает тело SOAP-сообщения, временную отметку, заголовки адресации и маркер Username. Аутентификация сообщения обеспечивается с помощью маркера Username. Поскольку этот набор политик предоставляет типичные для реальных сценариев значения по умолчанию, он и будет использоваться в данном руководстве.
Рисунок 23. Копирование набора политик
- Введите
HelloWorldPolicySet
в качестве имени нового набора политик и, по желанию, любое описание в поле Description. Нажмите кнопку OK.
Экспорт набора политик
Как уже говорилось ранее, Rational Application Developer не позволяет настраивать наборы политик, поэтому для создания набора политик вы использовали консоль Administration Console в WebSphere Application Server. Затем этот набор политик можно экспортировать, чтобы дать потребителю возможность его использовать. Кроме того, можно прикрепить набор политик к поставщику или потребителю сервиса при помощи Rational Application Developer, чтобы набор политик прикреплялся при развертывании из Rational Application Developer.
-
В Administration Console выберите Services > Policy sets > Application policy sets, как показано на рисунке 22.
-
Отметьте флажок рядом с HelloWorldPolicySet и нажмите кнопку Export….
Рисунок 24. Экспорт наборов политик
-
Нажмите на ссылку HelloWorldPolicySet.zip, как показано на рисунке 24, и сохраните файл в c:\temp
. Нажмите кнопку OK, чтобы сохранить файл.
Создание связывания набора политик
Набор политик определяет политики для прикрепления к поставщику сервиса, однако вам необходимо назначить связывание, чтобы указать используемые настройки сервиса, например хранилища ключей. Чтобы не начинать с нуля, скопируйте эталонные связывания поставщика, т.к. обычно этот способ упрощает задачу и является рекомендуемой методикой.
-
В меню Services откройте папку Policy sets и выберите ссылку General provider policy set bindings. Эта ссылка отобразит список связываний наборов политик поставщика.
-
Установите флажок рядом со связыванием набора политик Provider sample, а затем нажмите кнопку Copy….
- Введите
HelloWorldProviderBindings
в качестве имени для новых связываний и, по желанию, любое описание в поле Description, как показано на рисунке 25.
Рисунок 25. Копирование связываний наборов политик для настройки
-
Нажмите кнопку ОК.
Настройка связывания набора политик сервиса
Пример поставщика, с которого вы начали, предназначен только для демонстрационных целей, и чтобы обеспечить защиту производственного уровня, необходимо изменить ключи. Следовательно, теперь вам необходимо настроить новое связывание набора политик, заменив ключи примера на реальные ключи, которые вы сгенерировали ранее.
Чтобы настроить связывание набора политик, указав в нем ваши доверенные сертификаты:
-
Перейдите в раздел Keys and certificates policy bindings, выбрав HelloWorldProviderBindings > WS-Security > Keys and certificates.
-
Прокрутите страницу до раздела Trust anchor и нажмите кнопку New….
-
Введите HelloServerTrustStore
в поле Name и отметьте переключатель External keystore.
-
Введите полный путь ${USER_INSTALL_ROOT}\config\cells\<yourCellName>\helloServerKeys.jks
к внешнему хранилищу ключей.
Для простоты в данном руководстве мы используем жестко закодированный путь к хранилищу ключей. Как правило, нужно создать новую переменную WebSphere (например, MY_KEY_STORE
), которая указывала бы абсолютный путь, чтобы не приходилось менять связывания наборов политик при переходе от одной ячейки к другой.
-
Выберите JKS
в качестве типа хранилища ключей.
- Введите
f00bar
в качестве пароля хранилища ключей. Экран должен выглядеть примерно так, как показано на рисунке 26.
Рисунок 26. Новый trust anchor (доверенный якорь)
Путь к внешнему хранилищу ключей на моей машине - C:\Program Files\IBM\SDP\runtimes\base_v7\profiles\was70profile1\config\cells\griffith-t60pNode01Cell\helloServerKeys.jks
.
- Нажмите кнопку OK, чтобы сохранить изменения.
На этом шаге вы настроили связывание набора политик на ваши доверенные сертификаты. Этот шаг позволяет гарантировать, что в качестве открытого сертификата для шифрования сообщений будет использоваться доверенный сертификат. Для простоты в данном руководстве в качестве доверенного хранилища используется хранилище ключей на стороне сервера. Обычно доверенное хранилище содержит центры сертификации (например, Verisign, GeoTrust), которые подписали открытые ключи.
Теперь, когда вы определили ваше доверенное хранилище, можно настроить маркер подписи входящих сообщений на использование доверенного хранилища. По существу, этот маркер подтверждает, что ключ, используемый для подписания сообщения, является доверенным ключом.
Чтобы настроить маркер подписи входящих сообщений на использование доверенного хранилища:
- Перейдите в Authentication and protection bindings, выбрав HelloWorldProviderBindings > WS-Security > Authentication and protection. Отобразится такое же окно, как на рисунке 27.
Рисунок 27. Настройка связываний наборов политик
- Выберите con_signx509token > Callback handler. Вместо DigSigCertStore установите (none) в поле Certificate store. Затем выберите HelloServerTrustStore рядом с меткой Trusted anchor store, как показано на рисунке 28.
Рисунок 28. Изменение хранилища сертификатов
-
Нажмите кнопку OK, чтобы сохранить настройки обработчика обратного вызова.
-
Снова нажмите кнопку OK, чтобы сохранить настройки маркера подписи потребителя, после чего вы вернетесь на страницу Authentication and protection, как показано на рисунке 27.
Теперь, когда вы указали доверенное хранилище, используемое для проверки подписи входящих сообщений, необходимо настроить маркер, который будет использоваться для подписания исходящих сообщений:
Чтобы настроить маркер подписи исходящих сообщений:
-
Выберите gen_signx509token > Callback handler. Затем выберите Custom в выпадающем списке в разделе Key store и нажмите ссылку Custom keystore configuration.
- Измените значения в соответствии с таблицей:
Поле |
Значение |
Путь к хранилищу ключей |
${USER_INSTALL_ROOT}\config \cells\<yourCellName> \helloServerKeys.jks |
Тип хранилища ключей |
JKS |
Пароль хранилища ключей |
f00bar |
Имя ключа |
cn=server1,o=IBM,c=US |
Псевдоним ключа |
server1 |
Пароль ключа |
passw0rd |
Обратите внимание, что поскольку для исходящих подписей используется закрытый ключ псевдонима server1, необходимо указать пароль закрытого ключа.
-
Нажмите кнопку OK, чтобы сохранить изменения конфигурации хранилища ключей.
-
Нажмите кнопку OK, чтобы сохранить настройки обработчика обратного вызова.
-
Нажмите кнопку OK, чтобы сохранить настройки маркера. После этого вы вернетесь на страницу Authentication and protection, как показано на рисунке 27.
Теперь, когда вы настроили связывание для подписей, необходимо настроить связывание для шифрования и дешифрования. Начнем с маркера con_encx509token, который используется для дешифрования входящих сообщений.
Чтобы настроить связывание для шифрования и дешифрования:
-
Выберите con_encx509token > Callback handler. Затем выберите Custom в выпадающем списке в разделе Key store и нажмите ссылку Custom keystore configuration.
- Измените значения в соответствии с таблицей:
Поле |
Значение |
Путь к хранилищу ключей |
${USER_INSTALL_ROOT}\config \cells\<yourCellName> \helloServerKeys.jks |
Тип хранилища ключей |
JKS |
Пароль хранилища ключей |
f00bar |
Имя ключа |
cn=server1,o=IBM,c=US |
Псевдоним ключа |
server1 |
Пароль ключа |
passw0rd |
Обратите внимание, что поскольку вы обращаетесь к закрытому ключу, в дополнение к паролю хранилища ключей нужно ввести пароль ключа.
Результат должен быть похож на рисунок 29.
Рисунок 29. Хранилище ключей для дешифрования потребителя
-
Нажмите кнопку OK, чтобы сохранить изменения конфигурации хранилища ключей.
-
Нажмите кнопку OK, чтобы сохранить настройки обработчика обратного вызова.
-
Нажмите кнопку OK, чтобы сохранить настройки маркера. После этого вы вернетесь на страницу Authentication and protection, как показано на рисунке 27.
Чтобы настроить маркер, используемый для шифрования исходящих сообщений:
-
Выберите gen_encx509token > Callback handler. Затем выберите Custom в выпадающем списке в разделе Key store и нажмите ссылку Custom keystore configuration.
- Измените значения в соответствии с таблицей:
Поле |
Значение |
Путь к хранилищу ключей |
${USER_INSTALL_ROOT}\config \cells\<yourCellName> \helloServerKeys.jks |
Тип хранилища ключей |
JKS |
Пароль хранилища ключей |
f00bar |
Имя ключа |
cn=myclient,o=ACME,c=US |
Псевдоним ключа |
myclient |
Обратите внимание, что в данном случае не нужно предоставлять пароль для псевдонима ключа, поскольку для шифрования исходящего ответа используется открытый ключ клиента.
-
Нажмите кнопку OK, чтобы сохранить изменения конфигурации хранилища ключей.
-
Нажмите кнопку OK, чтобы сохранить настройки обработчика обратного вызова.
-
Нажмите кнопку OK, чтобы сохранить настройки маркера. После этого вы вернетесь на страницу Authentication and protection, как показано на рисунке 27.
На данный момент вы создали собственный набор политик и собственное связывание набора политик для использования собственных ключей. Хотя WebSphere Application Server V7 предоставляет возможность прикреплять к сервису наборы политик и связывания в Administrative Console, в данном руководстве для выполнения этой задачи будет использоваться Rational Application Developer V7.5.2. Поэтому необходимо экспортировать набор политик и связывания для последующего импорта в Rational Application Developer.
Экспорт связывания набора политик
Экспорт связываний наборов политик выполняется аналогично ранее описанному экспорту скопированного набора политик. Поскольку данное связывание набора политик предназначено только для поставщика сервиса (т.е. стороны сервера), экспортировать его не обязательно. Однако экспорт дает возможность прикреплять связывание к поставщику сервиса в Rational Application Developer, что упрощает прикрепление набора политик при разработке.
-
В меню Services откройте папку Policy sets. Выберите ссылку General provider policy set bindings, чтобы отобразить список связываний наборов политик поставщика.
-
Отметьте флажок рядом со связываниями набора политик HelloWorldProviderBindings и нажмите кнопку Export….
- Выберите ссылку HelloWorldPolicySet.zip, как показано на рисунке 30, и сохраните файл в
c:\temp
. Нажмите кнопку OK, чтобы сохранить файл.
Рисунок 30. Экспорт связываний наборов политик
Раздел 5. Защита поставщика сервиса
Теперь, когда вы создали собственные набор политик и связывание набора политик (которое экспортировали в c:\temp
), необходимо импортировать их в HelloWorldProject для прикрепления к поставщику сервиса. Напомним, что наборы политик предоставляют декларативный способ определения качества обслуживания (QoS) для Web-сервисов. Прикрепляя набор политик и связывание к Web-сервису, вы декларативно указываете используемое качество обслуживания.
-
В главном меню Rational Application Developer выберите File > Import > Web services > WebSphere Policy Sets. Затем нажмите кнопку Next, после чего отобразится диалоговое окно, показанное на рисунке 31.
-
Нажмите кнопку Browse… и выберите файл HelloWorldPolicySet.zip, который вы ранее экспортировали в c:\temp
.
- Мастер прочтет zip-файл и выведет список наборов политик, содержащихся в этом файле. Отметьте флажок рядом с HelloWorldPolicySet и нажмите кнопку Finish.
Рисунок 31. Импорт набора политик
-
По аналогии с выполненными ранее действиями щелкните правой кнопкой мыши на HelloWorldProject и выберите Import > Import > Web services > WebSphere Named Bindings. Теперь нажмите кнопку Next, после чего отобразится диалоговое окно, показанное на рисунке 32.
-
Нажмите кнопку Browse… и выберите файл HelloWorldProviderBindings.zip, который вы ранее экспортировали в c:\temp
.
- Мастер прочтет zip-файл и выведет список связываний наборов политик, содержащихся в этом файле. Отметьте флажок рядом с HelloWorldProviderBindings и нажмите кнопку Finish.
Рисунок 32. Импорт связываний наборов политик
После импорта набора политик и связываний в Rational Application Developer можно прикрепить их к поставщику сервиса.
- В Rational Application Developer выберите HelloWorldProject > Services > {http://dwexample.ibm.com}HelloWorldProviderService, затем щелкните правой кнопкой мыши и выберите Manage policy set attachment…, как показано на рисунке 33:
Рисунок 33. Прикрепление набора политик и связываний
-
Нажмите кнопку Add, чтобы добавить к конечной точке набор политик и связывание.
- Укажите область действия для всего сервиса и выберите HelloWorldPolicySet из выпадающего списка Policy Set и HelloWorldProviderBindings из выпадающего списка Binding, как показано на рисунке 34.
Рисунок 34. Настройка связываний наборов политик
-
Нажмите кнопку OK, чтобы сохранить связывание.
-
Нажмите кнопку Finish, чтобы закрыть диалоговое окно прикрепления набора политик.
Теперь, когда набор политик и связывания прикреплены к поставщику сервиса, вы развернете поставщика сервиса в среде исполнения WebSphere Application Server и проверите прикрепление набора политик и связываний.
Существуют разнообразные способы развертывания поставщика сервиса на сервере WebSphere Application Server, но в данном руководстве используется пункт меню Add and Remove Projects…, доступный в представлении Servers Rational Application Developer.
Чтобы развернуть поставщик сервиса:
- Щелкните правой кнопкой мыши на WebSphere Application Server v7.0 at localhost (это может быть какой-нибудь другой запущенный вами сервер) и выберите Open. Отобразится страница настроек конфигурации сервера, как показано на рисунке 35.
Рисунок 35. Настройка сервера WebSphere Application Server V7.0
-
Убедитесь, что в разделе Publishing settings for WebSphere Application Server отмечен переключатель Run server with resources on Server.
- Сохраните и закройте файл конфигурации сервера.
Параметр Run server with resource on Server гарантирует, что прикрепление набора политик и связываний отобразится в консоли Administrative Console сервера WebSphere Application Server.
Чтобы выполнить новое развертывание, нужно удалить HelloWorldProjectEAR с сервера, а затем повторно добавить его.
-
Щелкните правой кнопкой мыши на проекте HelloWorldProjectEAR под WebSphere Application Server v7.0 at localhost в представлении Servers и выберите Remove, как показано на рисунке 36.
Рисунок 36. Удаление HelloWorldProjectEAR с сервера
Теперь, когда проект удален, его нужно добавить обратно для нового развертывания.
-
Щелкните правой кнопкой мыши на WebSphere Application Server v7.0 at localhost (это может быть какой-нибудь другой запущенный вами сервер) и выберите Add and Remove Projects…, как показано на рисунке 37.
- Выберите проект HelloWorldProjectEAR в поле Available projects и нажмите кнопку Add >, чтобы переместить его в поле Configured projects, а затем нажмите кнопку Finish.
Рисунок 37. Развертывание поставщика сервиса на сервере WebSphere Application Server
-
После развертывания и публикации сервера используйте Administrative Console, чтобы убедиться в том, что поставщик сервиса успешно развернут на WebSphere Application Server и что прикреплены набор политик и связывания. Снова щелкните правой кнопкой мыши на WebSphere Application Server v7.0 at localhost, но на этот раз выберите Administration > Run Administrative console.
-
Войдите в консоль администратора и выберите Services > Services providers. В списке поставщиков сервисов вы должны увидеть HelloWorldProviderService.
-
Нажмите HelloWorldProviderService, чтобы развернуть сервис.
- Вы увидите прикрепленные HelloWorldPolicySet в столбце Attached Policy Set и HelloWorldProviderBindings в столбце Binding, как показано на рисунке 38.
Рисунок 38. Проверка прикрепления набора политик и связываний
Если HelloWorldProviderService отсутствует в окне Service providers, выйдите из Adminstrative Console и войдите снова, чтобы обновить консоль, после чего вы увидите прикрепленные к поставщику сервиса набор политик и связывания, как показано на рисунке 38.
Ранее вы скопировали набор политик по умолчанию Username WSSecurity: этот набор политик определяет аутентификацию посредством маркера username. Таким образом, необходимо включить защиту на сервере WebSphere Application Server, чтобы могла выполняться аутентификация.
Для включения защиты на сервере WebSphere Application Server:
- В Administrative Console перейдите к Security > Global security и убедитесь, что отмечены флажки Enable administrative security и Enable application security, как показано на рисунке 39.
Рисунок 39. Включение защиты приложения
- Если защита не была включена ранее, необходимо перезапустить сервер WebSphere Application Server, чтобы настройки защиты вступили в силу.
Раздел 6. Использование защищенного сервиса
В настоящий момент у вас есть выполняющийся на сервере WebSphere Application Server V7 поставщик сервиса с настроенным набором политик HelloWorldPolicySet и прикрепленными связываниями. Если перезапустить разработанный ранее потребитель сервиса, поставщик сервиса возвратит SOAP-ошибку, показывающую, что потребитель не придерживается прикрепленного к поставщику набора политик. Поэтому необходимо прикрепить набор политик к потребителю (т.е. на стороне клиента) и настроить связывания потребителя в соответствии с ожиданиями поставщика сервиса.
Одним из способов гарантировать, что потребитель придерживается политики поставщика, является использование одного и того же набора политик, что мы и сделаем в данном руководстве. Поскольку HelloWorldPolicySet уже импортирован в Rational Application Developer для прикрепления к поставщику сервиса, его можно прикрепить и к потребителю сервиса.
Прикрепление набора политик
Набор политик прикрепляется к потребителю сервиса аналогично тому, как это делается для поставщика сервиса. Этот процесс описывается в следующих разделах.
Чтобы настроить связывание на стороне потребителя для подписей:
-
Перейдите к HelloWorldConsumer > Services > Clients > {http://dwexample.ibm.com}HelloWorldProviderService. Щелкните правой кнопкой мыши и выберите Manage policy set attachment….
- Нажмите кнопку Next, а затем кнопку Add… в разделе Application, после чего появится диалоговое окно, показанное на рисунке 40.
Рисунок 40. Прикрепление набора политик
-
Выберите HelloWorldPolicySet из выпадающего списка Policy Set.
-
Введите HelloWorldConsumerBinding
в поле выпадающего списка Binding и нажмите OK.
- Выберите политику WSSecurity в разделе Bindings Configuration. Нажмите кнопку Configure…, после чего появится диалоговое окно WSSecurity Binding Configuration, как показано на рисунке 41.
Рисунок 41. WSSecurity Binding Configuration
-
Выберите вкладку Digital Signature Configuration и нажмите кнопку Key Store Settings… в разделе Outbound Message Security Configuration.
- В диалоговом окне Key Store Settings, показанном на рисунке42, введите значения из следующей таблицы:
Поле |
Значение |
Путь к хранилищу ключей |
C:\Program Files\IBM\SDP \myclientKeys.jks |
Пароль хранилища ключей |
g00ber |
Тип хранилища ключей |
JKS |
Псевдоним ключа |
myclient |
Пароль ключа |
p@ssword |
Рисунок 42. Настройки ключа подписи исходящего сообщения
Обратите внимание, что указывается подписание исходящего сообщения (т.е. запроса сервиса) с использованием закрытого ключа псевдонима myclient.
-
Нажмите кнопку OK.
-
В разделе Inbound Message Security Configuration снимите отметку с Trust Any Certificate, потому что мы будем доверять подписи только в случае, если ответ получен с сервера.
- Нажмите кнопку Key Store Settings… и введите значения из следующей таблицы:
Поле |
Значение |
Путь к хранилищу ключей |
C:\Program Files\IBM\SDP \myclientKeys.jks |
Пароль хранилища ключей |
g00ber |
Тип хранилища ключей |
JKS |
- Нажмите кнопку OK.
- Введите
C:\temp\server1.cert
в поле Certificate Path.
Итак, вы настроили связывание на стороне потребителя для подписей. Теперь вы настроите ключи, используемые для шифрования.
Чтобы настроить ключи, используемые для шифрования:
-
Выберите вкладку XML Encryption Configuration и нажмите кнопку Key Store Settings… в разделе Outbound Message Security Configuration.
- В диалоговом окне Key Store Settings, показанном на рисунке 43, введите значения из следующей таблицы:
Поле |
Значение |
Путь к хранилищу ключей |
C:\Program Files\IBM\SDP \myclientKeys.jks |
Пароль хранилища ключей |
g00ber |
Тип хранилища ключей |
JKS |
Псевдоним ключа |
server1 |
Рисунок 43. Настройки ключа шифрования исходящего сообщения
Поскольку шифруется запрос сервиса для поставщика сервиса, который связан с сертификатом server1, указывается открытый ключ server1, как показано на рисунке 43.
- Нажмите кнопку OK.
Для настройки шифрования входящего сообщения (т.е. ответа):
- На вкладке XML Encryption Configuration нажмите кнопку Key Store Settings… в разделе Inbound Message Security Configuration.
- В диалоговом окне Key Store Settings, показанном на рисунке 44, введите значения из следующей таблицы:
Поле |
Значение |
Путь к хранилищу ключей |
C:\Program Files\IBM\SDP \myclientKeys.jks |
Пароль хранилища ключей |
g00ber |
Тип хранилища ключей |
JKS |
Псевдоним ключа |
myclient |
Пароль ключа |
p@ssword |
Рисунок 44. Настройки ключа шифрования входящего сообщения
Ответ провайдера шифруется с использованием открытого ключа клиента. Поэтому его нужно дешифровать с использованием закрытого ключа клиента, который указывается в диалоговом окне, приведенном на рисунке 44.
-
Нажмите кнопку OK.
Напомним, что набор политик по умолчанию Username WSSecurity, который вы скопировали, определяет аутентификацию посредством маркера username. Необходимо каким-то образом получить действительный маркер username в SOAP-заголовке для сервера, чтобы убедиться, что вы прошли аутентификацию до выполнения Web-сервиса поставщика. Вкладка Token Authentication предоставляет два способа. Вы будете использовать UNTGenerateCallbackHandler.
-
Выберите вкладку Token Authentication, а затем в поле Сallback handler выберите com.ibm.websphere.wssecurity.callbackhandler.UNTGenerateCallbackHandler, как показано на рисунке 45.
-
Введите действительные имя пользователя и пароль, соответствующие репозиторию пользователей сервера WebSphere Application Server (например, admin/admin).
-
Отметьте флажок Add Timestamp.
-
Отметьте флажок Add Nonce.
- Нажмите кнопку OK, а затем кнопку Finish.
Рисунок 45. Token Authentication
Если в диалоговом окне, показанном на рисунке 45, отсутствуют флажки Add Timestamp и Add Nonce, необходимо убедиться, что используется сервер Rational Application Developer 7.5.2.
Раздел 7. Тестирование защиты JAX-WS
В разделе 3 руководства были протестированы поставщик и потребитель сервиса, а также было продемонстрировано прохождение SOAP-сообщений между клиентом и сервером. В этом разделе еще не была реализована защита на уровне сообщений посредством прикрепления наборов политик, поэтому SOAP-сообщения отправлялись открытым текстом (т.е. без шифрования), как показано на рисунке 17. Поскольку одной из целей защиты на уровне сообщений является обеспечение конфиденциальности (только назначенный получатель может увидеть содержимое SOAP-сообщения), теперь нужно вернуться к тесту и убедиться, что SOAP-сообщения содержат зашифрованные данные, невидимые ни для кого, кроме назначенного получателя (даже для TCP/IP Monitor, который выступает в качестве посредника).
- Убедитесь, что TCP/IP Monitor запущен, как показано на рисунке 15, затем щелкните на файле ClientTest.java проекта HelloWorldConsumer и выберите Run As > Run Configurations. В результате отобразится диалоговое окно Run Configurations, как показано на рисунке 46.
Рисунок 46. Настройка параметров ClientTest
- Поскольку для передачи учетных данных Username потребитель должен использовать Java Authentication and Authorization Service (JAAS), необходимо указать следующую информацию в поле VM arguments:
-Djava.security.auth.login.config=
"C:\Program Files\IBM\SDP\runtimes\base_v7
\profiles\was70profile1\properties\wsjaas_client.conf"
|
- Теперь нажмите кнопку Run и посмотрите на результат в представлении TCP/IP Monitor, которое приведено на рисунке 47.
Рисунок 47. Отображение SOAP-сообщений с XML-шифрованием
Обратите внимание, что Console отображает исходящее от потребителя сообщение после его дешифрования. Если просмотреть журнал консоли WebSphere Application Server, можно увидеть аналогичное сообщение, демонстрирующее, что поставщик сервиса получил сообщение.
Раздел 8. Заключение
В данном руководстве мы продемонстрировали создание поставщика Web-сервиса с использованием JAX-WS аннотаций. Затем мы показали, как создать соответствующего потребителя и протестировать обмен сообщениями между клиентом и сервером. Потом мы продемонстрировали создание набора политик и его настройку с персонифицированными асимметричными ключами перед повторным тестированием клиента и сервера. Кроме того, мы показали, как проконтролировать прохождение данных между клиентом и сервером, а также проверить, что SOAP-сообщения на самом деле зашифрованы и защищены посредством настраиваемого набора политик, ассоциированного с потребителем и поставщиком сервиса.
Хотя данное руководство разрабатывалось в учебных и ознакомительных целях, в нем рассматриваются реальные варианты конфигурации производственного уровня, в которых для шифрования и защиты используется устойчивая криптография.
Ресурсы
Загрузка
Описание |
Имя |
Размер |
Метод загрузки |
Исходный код примера |
secure_jaxws_pi.zip |
24 КБ |
HTTP |