Включение защиты веб-служб

Используйте следующий способ для включения защиты веб-служб на уровне веб-сообщений. Можно включить основную аутентификацию HTTP (защита на уровне транспорта), добавив в политику дополнительные свойства.

Процедура

  1. Остановите все серверы Сервер Impact в кластере.
  2. Выполните следующие шаги на первичном сервере Сервер Impact. Эти изменения реплицируются на вторичные серверы в кластере.
    1. Измените файл $IMPACT_HOME/dsa/wsdsa/wss/conf/wss.xml в своем каталоге установки Tivoli Netcool/Impact для конфигурирования возможностей защиты, которые требуются для вызовов веб-служб. В большинстве случаев надо изменить два связанных элемента XML в файле wss.xml, а именно, OutflowSecurity и, возможно, InflowSecurity.
    2. Измените файл $IMPACT_HOME/dsa/wsdsa/wss/conf/wscb.properties для конфигурирования ID пользователя и пароля, требуемых конкретной возможностью защиты. Например, UsernameToken или Signature. Этот файл должен быть представлен в следующем формате:
      num=2 
      uid.1=client 
      pwd.1=apache 
      uid.2=service 
      pwd.2=apache 
      где num - это свойство, определяющее, сколько пар имен пользователей и паролей содержится в файле. uid.1 определяет имя пользователя для первой пары, а pwd.1 - это пароль в первой паре. Та же схема применима ко всем последующим парам.
  3. Выполните следующие действия для каждого сервера Сервер Impact в кластере:
    1. Если для вызовов веб-служб требуются такие возможности защиты, как подписи и шифрование, по пути задействованного класса Java должен находиться файл свойств подписей или файл свойств шифрования. Поместите файлы свойств в файл jar, скомпилированный для веб-службы; подробную информацию смотрите в теме Создание политики веб-служб с использованием защиты веб-служб. Ниже представлен пример файла свойств с именем client.properties. Каждую строку кода надо вводить на отдельной строке.
      org.apache.ws.security.crypto.provider=
      org.apache.ws.security.components.crypto.Merlin 
      org.apache.ws.security.crypto.merlin.keystore.type=jks 
      org.apache.ws.security.crypto.merlin.keystore.password=apache 
      org.apache.ws.security.crypto.merlin.file=client.jks 
      Этот файл свойств содержит информацию о файле склада ключей, где находятся открытые и секретные ключи, используемые для подписи или шифрования. Для отображения информации о вашем файле склада ключей первую первой запись в этом файле нужно оставить без изменения, а три последующие необходимо изменить.
  4. Запустите первичный сервер Сервер Impact. Убедитесь, что он запущен и инициализирован успешно.
  5. Чтобы включить возможность защиты веб-служб в DSA веб-служб, добавьте в политику следующие дополнительные свойства.
    callProps = NewObject();
    callProps.EnableWSS = true;
    callProps.WSSRepository= "/tmp/dsa/wsdsa/wss";
    callProps.WSSConfigFile = "/tmp/dsa/wsdsa/wss/conf/wss.xml";
    
  6. Функция WSInvokeDL() (поддерживаемая возможность защиты) запускается с дополнительным объектом callProps:
    result = WSInvokeDL("Sample07", endpoint, "echo", params, callProps)
  7. Запустите оставшийся вторичный сервер Серверы Impact.

Результаты

Предыдущие шаги включают защиту на уровне сообщений. Можно включить основную аутентификацию HTTP (защита на уровне транспорта), добавив в разрабатываемую вами политику следующие дополнительные свойства.
callProps=NewObject();
callProps.Username="myName";
callProps.Password="myPassword";
WSInvokeDL(....,paramArray, callProps);

Создание политики веб-службы с использованием защиты веб-служб

В этом примере показано, как настроить автономный сервер Rampart Apache Axis2 с политикой Netcool/Impact, чтобы включить защиту веб-служб.

Прежде чем начать

Информацию о модуле защиты Apache Axis2 Rampart смотрите по следующему URL. http://axis.apache.org/axis2/java/rampart/

Совет: Если вы используете другой сервер защиты веб-служб, убедитесь, что на этом сервере используются файлы свойств клиента и файлы .jks. Файлы Client.properties и client.jks используются на шаге 2 примера.
  • Требуется Java SDK или JRE 1.6 и новее. SDK Impact можно использовать, если вы устанавливаете пример в той же системе, где установлен продукт Netcool/Impact: IMPACT_HOME/sdk/bin
  • Требуется Ant 1.8 или новее. Можно использовать пакет Ant Netcool/Impact IMPACT_HOME/ant
  • Убедитесь, что исполняемые файлы Java и Ant указаны в системной переменной среды PATH.

Об этой задаче

В этом примере используется Apache Axis2 версии 1.6.2 и rampart версии 1.6.2.

  1. Задайте Rampart как автономный сервер.
    1. Скачайте Axis2 со следующего URL. http://axis.apache.org/axis2/java/core/download.cgi
    2. Скачайте Rampart со следующего URL: http://axis.apache.org/axis2/java/rampart/download.html
    3. Распакуйте файлы, которые вы скачали на предыдущих двух шагах, и задайте следующие переменные среды:
      • AXIS2_HOME=<где пакет axis2 скачан и распакован>
      • RAMPART_HOME=<где пакет rampart скачан и распакован>
    4. Скопируйте все файлы JAR из RAMPART_HOME\lib в AXIS2_HOME\lib cp –rf RAMPART_HOME\lib\* AXIS2_HOME\lib\.
      Напоминание: Пакет Rampart работает на сервере Windows, а Netcool/Impact работает на сервере UNIX. Используйте соответствующий разделитель файловой системы в соответствии с вашей операционной системой.
    5. Скопируйте следующие два файла MAR в AXIS2_HOME\repository\modules.
      • RAMPART_HOME\modules\ rahas-1.6.2.mar
      • RAMPART_HOME\modules\rampart-1.6.2.mar.
      • Введите следующие команды.
        Copy  RAMPART_HOME\modules\ rahas-1.6.2.mar   AXIS2_HOME\repository\modules\.
        
        Copy  RAMPART_HOME\modules\ rampart -1.6.2.mar   AXIS2_HOME\repository\modules\.
    6. Перейдите в каталог RAMPART_HOME\samples\basic
      cd RAMPART_HOME\samples\basic

      В этот каталог включены несколько типовых примеров под названиями от sample01 до sample11. Этот пример использует sample04. Прикладная программа sample04 просто повторяет сообщение, которое вы вводите в переменную.

    7. Введите следующую команду, чтобы построить приложение sample04 и запустить автономный сервер.
      ant clean service.04
      Эта команда создает все необходимые файлы и запускает автономное приложение для sample04. Номер порта будет показан в терминале.
      Buildfile: E:\opt\rampart-1.6.2\samples\basic\build.xml
      
      clean:
         [delete] Deleting directory E:\opt\rampart-1.6.2\samples\basic\build
      
      check.dependency:
      
      service.04:
          [mkdir] Created dir: 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\sample04
          [mkdir] Created dir: 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\sample04\
      			services
          [mkdir] Created dir: 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\sample04\
      			modules
           [copy] Copying 2 files to 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\sample04\modules
          [mkdir] Created dir: E:\opt\rampart-1.6.2\samples\basic\build\temp
          [mkdir] Created dir: E:\opt\rampart-1.6.2\samples\basic\build\temp\META-INF
          [javac] E:\opt\rampart-1.6.2\samples\basic\build.xml:191: 
      			warning: 'includeantruntime' was not set, 
      defaulting to build.sysclasspath=last; set to false for repeatable builds
          [javac] Compiling 2 source files to E:\opt\rampart-1.6.2\samples\basic\build\temp
           [copy] Copying 1 file to E:\opt\rampart-1.6.2\samples\basic\build\temp\META-INF
           [copy] Copying 1 file to E:\opt\rampart-1.6.2\samples\basic\build\temp
           [copy] Copying 1 file to E:\opt\rampart-1.6.2\samples\basic\build\temp
            [jar] Building jar: 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\
      				sample04\services\sample04.aar
         [delete] Deleting directory E:\opt\rampart-1.6.2\samples\basic\build\temp
           [java] [SimpleHTTPServer] Starting
           [java] [SimpleHTTPServer] Using the Axis2 Repository 
      E:\opt\rampart-1.6.2\samples\basic\build\service_repositories\sample04
           [java] [SimpleHTTPServer] Listening on port 8080
           [java] [INFO] Deploying module: addressing-1.6.2 - file:
      /E:/opt/rampart-1.6.2/samples/basic/build/service_repositories/sample04/modules
      /addressing-1.6.2.mar
           [java] [INFO] Deploying module: rampart-1.6.2 - file:
      /E:/opt/rampart-1.6.2/samples/basic/build/service_repositories/sample04/modules/ra
      mpart-1.6.2.mar
           [java] [INFO] Deploying Web service: sample04.aar - file:
      /E:/opt/rampart-1.6.2/samples/basic/build/service_repositories/sample04/servic
      es/sample04.aar
           [java] [INFO] Listening on port 8080
           [java] [SimpleHTTPServer] Started
      В примере показано, что сервер работает на порту 8080, и никаких предупреждений и ошибок нет.
    8. Проверьте приложение, выбрав http://server:8080/axis2/services, и просмотрите следующий вывод.
      Внедренные службы
      sample04
      Доступные операции 
      echo
      Щелкните по ссылке sample04 , чтобы просмотреть файл WSDL. Полная ссылка на файл WSDL - http://сервер:8080/axis2/services/sample04?wsdl.

    Теперь, когда служба работает, следующим шагом будет создание политики и конфигурирование Netcool/Impact.

  2. Создайте политику Netcool/Impact и сконфигурируйте защиту веб-служб.
    1. Создайте политику с помощью мастера политики обычным способом. Файл WSDL - это http://сервер:8080/axis2/services/sample04?wsdl, а файл JAR называется sample04.
      Напоминание: Когда мастер запрашивает конечную точку и защиту, убедитесь, что вы включили защиту. Выберите следующую опцию Аутентификация имени пользователя сообщений SOAP, чтобы не вводить имя пользователя и пароль.
    2. Мастер создает политику со следующими параметрами:
      
      //Включить защиту веб-служб
      callProps=NewObject();
      callProps.EnableWSS = true;
      callProps.WSSRepository= "/opt//IBM/tivoli/Impact71/dsa/wsdsa/wss";
      callProps.WSSConfigFile = "/opt/ /IBM/tivoli/Impact71/dsa/wsdsa/wss/conf/Sample04_wss.xml";
      Совет: Путь к файлу может быть другим, если вы установили Netcool/Impact в другое положение.
    3. Файл XML /opt/ /IBM/tivoli/Impact71/dsa/wsdsa/wss/conf/Sample04_wss.xml создается как шаблон.

      Например, вам может понадобиться добавить оператор, чтобы изменить действия параметров InFlowSecurity и OutFlowSecurity в соответствии с реализации прикладной программы. Подробности смотрите в файле services.xml прикладной программы в каталоге $RAMPART_HOME/samples/basic/<каталог_примера>.

      Если вы используете другой сервер веб-служб, надо изменить файлы соответственно. Полностью рабочий файл XML для этого примера приведен в конце этого раздела - смотрите Пример Sample04_wss.xml. Обязательно замените существующий шаблон на измененные файлы.

    4. Обновите файл /opt/ /IBM/tivoli/Impact71/dsa/wsdsa/wss/conf/wscb.properties в num=1 uid.1=client pwd.1=apache
    5. Скопируйте или передайте по протоколу FTP файлы client.properties и client.jks из RAMPART_HOME\samples\keys в каталог IMPACT_HOME\wslib.
    6. Мастер создает файл JAR IMPACT_HOME/wslib/sample04.jar. Измените этот файл JAR, включив в него client.properties и client.jks, с помощью следующей команды:
      IMPACT_HOME/sdk/bin/jar –uf sample04.jar IMPACT_HOME/wslib/ client.*
      Чтобы убедиться, что файл JAR изменен, введите
      IMPACT_HOME\sdk\bin\jar –tf sample04.jar |grep client
      и посмотрите содержимое файла JAR.
    7. Переместите client.properties и client.jks из каталога wslib
    8. Перезапустите Netcool.
    9. Запустите политику, созданную мастером политики.

Результаты

Будут показаны следующие результаты:
Журнал анализатора: эхо-вызов веб-службы возвратил результат: 
<ns:echoResponse xmlns:ns="http://sample04.samples.rampart.apache.org" 
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
  <ns:return>Hello from Impact 7 Server</ns:return>
</ns:echoResponse

Пример Sample04_wss.xml

Рабочий пример шаблона Sample04_wss.xml.

Пример

<?xml version="1.0" encoding="UTF-8"?>
<!-- *************************************************** {COPYRIGHT-TOP-RM} ***
* Лицензированные материалы - Собственность IBM
* "Restricted Materials of IBM"
* 5724-S43
*
* (C) Copyright IBM Corporation 2006, 2011. Все права защищены.
*
* US Government Users Restricted Rights - Use, duplication, or
* disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
** новое:
******************************************************** {COPYRIGHT-END-RM} -->
<!-- Этот файл используется автоматизацией. Редактируйте его на свой собственный риск --><axisconfig name="AxisJava2.0">
  <module ref="rampart"/>
    <parameter name="OutflowSecurity">
      <action>
          <items>Timestamp Signature</items>
                  <user>client</user>
           <signaturePropFile>client.properties</signaturePropFile>
           <passwordCallbackClass>com.micromuse.common.util.WSPWCBHandler</passwordCallbackClass>
           <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
        </action>
       </parameter>

       <parameter name="InflowSecurity">
               <action>
                       <items>Timestamp Signature</items>
                  <signaturePropFile>client.properties</signaturePropFile>
                  </action>
        </parameter>

 
    <transportSender class="org.apache.axis2.transport.http.CommonsHTTPTransportSender" name="http">
        <parameter locked="false" name="PROTOCOL">HTTP/1.1</parameter>
        <parameter locked="false" name="Transfer-Encoding">chunked</parameter>
    </transportSender>

    <phaseOrder type="InFlow">
         <phase name="Transport">
            <handler class="org.apache.axis2.engine.RequestURIBasedDispatcher" 
							name="RequestURIBasedDispatcher">
                <order phase="Transport"/>
            </handler>
            <handler class="org.apache.axis2.engine.SOAPActionBasedDispatcher" 
							name="SOAPActionBasedDispatcher">
                <order phase="Transport"/>
            </handler>
        </phase>
        <phase name="Security"/>
        <phase name="PreDispatch"/>
        <phase class="org.apache.axis2.engine.DispatchPhase" name="Dispatch">
            <handler class="org.apache.axis2.engine.AddressingBasedDispatcher" 
							name="AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher" 
							name="SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler class="org.apache.axis2.engine.InstanceDispatcher" name="InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <phase name="OperationInPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFlow">
        <phase name="OperationOutPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
        <phase name="Security"/>
    </phaseOrder>
    <phaseOrder type="InFaultFlow">
        <phase name="PreDispatch"/>
        <phase class="org.apache.axis2.engine.DispatchPhase" name="Dispatch">
            <handler class="org.apache.axis2.engine.RequestURIBasedDispatcher" 
							name="RequestURIBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler class="org.apache.axis2.engine.SOAPActionBasedDispatcher" 
							name="SOAPActionBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler class="org.apache.axis2.engine.AddressingBasedDispatcher" 
							name="AddressingBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>

            <handler class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher" 
							name="SOAPMessageBodyBasedDispatcher">
                <order phase="Dispatch"/>
            </handler>
            <handler class="org.apache.axis2.engine.InstanceDispatcher" name="InstanceDispatcher">
                <order phase="Dispatch"/>
            </handler>
        </phase>
        <!--      пользователь может добавить в эту область свои фазы -->
        <phase name="OperationInFaultPhase"/>
    </phaseOrder>
    <phaseOrder type="OutFaultFlow">
        <!--      пользователь может добавить в эту область свои фазы -->
        <phase name="OperationOutFaultPhase"/>
        <phase name="PolicyDetermination"/>
        <phase name="MessageOut"/>
    </phaseOrder>
</axisconfig>