 | Уровень сложности: средний Боб Каллауэй, инженер-программист, IBM
18.03.2009 Ввиду все более широкого распространения Web-сервисов и сервис-ориентированных архитектур (SOA) обеспечение аутентичности, целостности и неотвергаемости XML-сообщений стало важным компонентом безопасной и надежной инфраструктуры обмена сообщениями. Настоящая статья на примере сценария демонстрирует читателю, как сочетание библиотеки Apache WSS4J и программно-аппаратных комплексов IBM® WebSphere® DataPower® SOA Appliances применяется для подписания и верификации XML-документов.
Введение
Часть стандарта Web Services Security (WS-Security), посвященная XML-подписям, позволяет вводить в XML-документы аутентификацию, целостность данных и неотвергаемость. Целью проекта Apache WSS4J было создание библиотеки на основе Java™, которую можно использовать как для подписания XML-документов, так и для верификации подписей. Однако выполнение криптографических операций, таких как подписание, утверждение и верификация, на оборудовании общего назначения требует больших вычислительных ресурсов.
Чтобы решить эту проблему, была создана серия программно-аппаратных специализированных устройств WebSphere DataPower SOA Appliances, предназначенных для высокооптимизированного выполнения криптографических функций, XML и Web-сервисов. Устройства WebSphere DataPower XML Security Gateway XS40 и WebSphere DataPower Integration Appliance XI50 выполняют эту роль, действуя как «правоохранительный узел» для XML-трафика, который осуществляет шифрование и дешифрацию данных, фильтрацию для межсетевого экрана, проверку схемы и управление доступом на основе XML. Целью настоящей работы является использование возможностей устройств WebSphere DataPower SOA Appliances в области XML и безопасности для верификации подписей во входящих XML-запросах с целью аутентификации отправителя, гарантирования целостности документа и обеспечение неотвергаемости. Это достигается путем конфигурирования WebSphere DataPower SOA Appliances для использования предоставленного публичного сертификата с целью удостоверения личности отправителя документа и проверки подлинности подписи. Благодаря высокооптимизированным криптографическим и XML-механизмам устройств WebSphere DataPower SOA Appliances этой функциональностью можно пользоваться с пренебрежимо малым влиянием на общую задержку сообщений. В настоящей статье приведен пример сценария, демонстрирующий эту функциональность
 | |
Цифровые подписи XML
Как составная часть стандарта WS-Security цифровые подписи XML обеспечивают возможность гарантировать аутентичность, целостность и неотвергаемость сообщений SOAP:
-
Аутентичность подтверждает подлинность отправителя сообщений.
-
Целостность гарантирует неизменность содержания подписанного сообщения.
-
Неотвергаемость устанавливает тот факт, что отправитель действительно отправил данное сообщение.
Стандарт WS-Security позволяет присоединять к сообщению множество подписей и форматов подписей, каждая из которых относится к разным и даже пересекающимся частям сообщения. Для создания цифровой подписи вычисляется значение контрольной суммы для нужных частей сообщения; это значение целиком зависит от точного значения данных, по которым оно вычисляется. При этом гарантируется целостность, так как получатель вычисляет ту же контрольную сумму по указанным данным, и если полученное значение отличается от значения, содержащегося в подписи, то ясно, что целостность данных была нарушена. Затем это значение контрольной суммы шифруется с применением частного ключа отправителя. При получении сообщения для расшифровки подписи применяется открытый ключ отправителя. В случае успешной расшифровки аутентичность сообщения установлена, так как только открытый ключ отправителя может расшифровать подписи, зашифрованные с применением его частного ключа. На этом шаге также обеспечивается неотвергаемость, так как только отправитель может иметь частный ключ, используемый для шифрования подписи; таким образом, отправитель не может отречься от переданного документа.
 |
Apache WSS4J
Apache WSS4J представляет собой Open Source-реализацию стандарта WS-Security. WSS4J — библиотека на основе Java, которую можно использовать как для подписания, так и для верификации сообщений SOAP при помощи информации WS-Security. Хотя она может использоваться в качестве библиотеки просто для подписания частей и целых сообщений SOAP, WSS4J может помочь и в реализации проектов Apache Axis и XML Security. Она также взаимодействует с Java API для RPC (JAX-RPC) на основе XML и с серверами и клиентами на основе Microsoft® .NET. Проект WSS4J предлагает простой и понятный API для добавления функциональности WS-Security в клиенты Web-сервисов для выполнения аутентификации, проверки целостности и неотвергаемости, гарантируемых цифровыми подписями XML.
WebSphere DataPower SOA
Appliances
В этом разделе содержится обзор особенностей и архитектуры WebSphere DataPower SOA Appliances и краткое описание подхода к использованию и внедрению программно-аппаратных комплексов. Семейство программно-аппаратных комплексов WebSphere DataPower SOA Appliances состоит из трех устройств с последовательными номерами моделей. Устройства с большими номерами модели превосходят устройства с меньшими номерами. Все устройства содержат один и тот же механизм и общие интерфейсы управления и мониторинга. Основной механизм управления WebSphere DataPower SOA Appliances представляет собой специализированный интерпретатор командной строки (command line interpreter - CLI), который позволяет пользователю выполнять действия по администрированию устройства. Он аналогичен интерфейсу командной строки операционной системы Cisco Internetworking Operating System (IOS). Устройства оснащены интерфейсом консоли (последовательный) и Secure SHell (SSH) для доступа к этому CLI. Графический интерфейс для всех устройств WebSphere DataPower SOA Appliances реализован в виде Web-интерфейса (WebGUI). Все действия по управлению, которые можно выполнить через CLI, можно выполнить также и с использованием более удобного WebGUI. В следующем разделе приведен пример, иллюстрирующий задание последовательности действий при помощи WebGUI. WebSphere DataPower SOA Appliances поддерживают также интерфейс управления SOAP (WS-), что позволяет осуществлять программный доступ к конфигурации устройства. Поставляемый с устройствами модуль Eclipse взаимодействует с этим интерфейсом и обеспечивает поддержку интегрированных сред разработки. В дополнение к этому все устройства WebSphere DataPower SOA Appliances оснащены широкой поддержкой функций мониторинга, регистрации событий и сигнализации. Благодаря поддержке большого числа уровней событий и критериев (IP, TCP, HTTP, XML, SOAP) выходные данные могут быть направлены в разные системы, включая файловые системы, Simple Network Management Protocol (SNMP), конечные точки SOAP, Common Base Event, IBM Tivoli® Composite Application Manager for SOA, консоль или системный буфер.
WebSphere
DataPower XML Accelerator XA35
Простейшее из устройств WebSphere DataPower SOA Appliances, IBM WebSphere
DataPower XML Accelerator XA35, выполняет ряд функций маршрутизации и преобразования. Оно поддерживает маршрутизацию на основе критериев IP, TCP, HTTP, XML и SOAP. Можно определить (или запросить) таблицы маршрутов для определения соответствующих действий по маршрутизации. Имеются также алгоритмы выравнивания нагрузки, такие как least-used и round-robin. В дополнение к этому XA35 может регулировать скорость обработки запросов в зависимости от критериев маршрутизации для формирования трафика. Выполнение преобразований в XA35 осуществляется при помощи высокопроизводительного механизма Extensible Stylesheet Language Transformation (XSLT). Специальное аппаратное устройство, используя общие внутренние механизмы всех систем WebSphere DataPower SOA Appliances, преобразует одну XML-схему в другую на скорости среды передачи. Имеется поддержка XSLT 1.0 и XPath 1.0 (с частичной поддержкой версий 2.0). Устройство может использовать и применять как внутренние, так и внешние схемы.
WebSphere DataPower XML Security Gateway XS40
В дополнение ко всем возможностям XA35 устройство XS40 предоставляет функции безопасности, позволяя выполнять шифрование и обработку цифровых подписей XML. Поддерживая WS-Security 1.0, WS-Trust и WS-SecureConversation, XS40 составляет фундамент, на котором можно развернуть WS-Security на предприятии. Имеется поддержка проверки авторизации (доступа) для внешних систем, таких как IBM Tivoli Access Manager, RSA Access Manager, Netegrity, Oblix и др. Есть частичная поддержка Security Assertion Markup Language (SAML) 2.0 и возможность извлекать и использовать верительные данные из Lightweight Directory Access Protocol (LDAP), Remote Authentication Dial-In User Service (RADIUS) и XML Key Management Specification (XKMS). Но, пожалуй, самая важная функция безопасности XS40 заключается в его возможностях по реализации функции межсетевого экрана. В дополнение к фильтрации входного трафика (как в системе маршрутизации XA35) функция межсетевого экрана XS40 обеспечивает защиту от атак XML denial-of-service. В сочетании с проверкой схемы и грамматической корректности устройство XS40 может служить важной составной частью системы безопасности сети на предприятии.
WebSphere DataPower Integration Appliance XI50
Наконец, устройство XI50 добавляет в семейство WebSphere DataPower SOA
Appliances возможности интеграции. Оно реализует ключевую идею преобразования из любого формата в любой, когда данные могут приниматься в любом формате через любой протокол и преобразовываться в любой другой формат через любой другой протокол с применением базовой технологии преобразования WebSphere DataPower SOA Appliances. В числе поддерживаемых протоколов HTTP, HTTPS, FTP, Java
Message Service (JMS) и MQ. SOAP/XML поддерживается стандартно, а поддержка произвольных форматов, таких как Electronic Data Interchange (EDI), CICS
Cobol Copybook, Common Object Request Broker Architecture (CORBA), ISO 8583, Comma
Separated Values (CSV), ASN.1, electronic business XML (ebXML) и другие, может быть реализована с применением технологии DataGlue.
Пример сценария
В этом сценарии устройство WebSphere DataPower Integration Appliance XI50 применяется для верификации подписи WS-Security в XML-документе, подписанном в приложении на основе WSS4J. Перечисленные ниже шаги предполагают, что установлен Java Development Kit (JDK), а переменная среды JAVA_HOME указывает на место установки JDK. Для выполнения этих шагов нужна также последняя версия библиотек Apache WSS4J, Apache Commons CLI,
Apache Commons Logging и Apache XML Security.
Генерация ключей и сертификатов
Чтобы подписать часть XML-документа, нужен частный ключ и открытый сертификат.
Примечание: Если у вас уже есть нужный частный ключ и открытый сертификат, переходите к разделу
Создание хранилища ключей Java keystore с вашим частным ключом и открытым сертификатом. Иначе, перейдите к следующему разделу для создания нового ключа собственной подписи и сертификата для использования в этом примере.
Применение инструментов Crypto
Tools устройства WebSphere DataPower Integration Appliance XI50 для создания пары ключ/сертификат
- Предположим, вы вошли в WebGUI устройства WebSphere DataPower SOA
Appliances и открыли вкладку Administration в левой части экрана.
- Щелкните на ссылке Crypto Tools под заголовком Miscellaneous.
- На вкладке Generate a Key заполните поля Common Name (CN) и File
Name.
- Все параметры Export Private Key, Generate Self-Signed
Certificate и Export Self-Signed Certificate должны иметь значение on.
- Параметрам Password Alias и Generate Key and Certificate Objects
присвойте значение off. После этого должна появиться форма, изображенная на
рис. 1.
Рисунок 1. Использование мастера Crypto
Tools Wizard для создания пары ключ/сертификат
- Нажмите кнопку Generate Key. Всплывающее окно попросит подтвердить создание ключа и сертификата.
- Нажмите кнопку Confirm. Появится окно подтверждения местонахождения экспортируемых ключа и сертификата (см. рис. 2).
Рисунок 2. Местонахождение генерируемых ключа и сертификата
- Нажмите кнопку Close.
Теперь нужно извлечь сгенерированные частный ключ и открытый сертификат.
- Щелкните на ссылке File Management вкладки Administration в левой части экрана(под заголовком Main).
- Разверните папку temporary, чтобы увидеть дерево файлов, экспортируемых из процесса генерации ключа и сертификата.
- Теперь нужно загрузить частный ключ и открытый сертификат собственной подписи, которые в данном случае называются sample-privkey.pem и
sample-sscert.pem. Чтобы загрузить эти файлы, щелкните правой кнопкой по каждой из ссылок
(sample-privkey.pem и sample-sscert.pem), выберите Save
Target As... и сохраните два файла в своей локальной системе.
Рисунок 3. Загрузка частного ключа и открытого сертификата
Создание хранилища ключей Java
с вашим частным ключом и открытым сертификатом
Если у вас уже есть частный ключ и открытый сертификат, которые хранятся в хранилище ключей Java, переходите к разделу Подписание XML-документа .
Иначе, при условии, что у вас есть частный ключ (в примере его имя
sample-privkey.pem) и открытый сертификат (в примере его имя
sample-sscert.pem), созданные ранее или только что при помощи описанных выше шагов, приступайте к следующим действиям:
- При помощи команды
openssl преобразуйте свой частный ключ и открытый сертификат в формат Distinguished Encoding Rules (DER) (см. листинг 1).
Листинг 1. Преобразование существующего ключа и сертификата в формат DER
openssl pkcs8 -topk8 -nocrypt -in sample-privkey.pem -inform PEM -out sample-privkey.der \
|--10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
-outform DER
openssl x509 -inform PEM -outform DER -in sample-sscert.pem -out sample-sscert.der
|
- Теперь поместим ключ и сертификат в хранилище ключей Java с применением Java-программы
OpenSSLToJKS, которая включена в настоящую статью. Как это делается, показано в листинге 2.
Листинг
2. Импортирование существующего ключа и сертификата (в формате DER) в хранилище ключей Java с применением OpenSSLToJKS
$JAVA_HOME/bin/javac -cp commons-cli-1.1.jar:. OpenSSLToJKS.java
$JAVA_HOME/bin/java -cp commons-cli-1.1.jar:. OpenSSLToJKS -alias sample -key \
sample-privkey.der -keypass password -cert sample-sscert.der -storefile sample.jks \
-storepass password
|
Теперь у вас есть хранилище ключей Java, которое можно использовать с библиотекой WSS4J для подписания XML-документа.
Подписание XML-документа
Прежде чем вы сможете подписывать XML-документы, нужно сконфигурировать приложение для использования хранилища ключей (созданного или уже существовавшего), в котором содержится частный ключ и открытый сертификат. Это делается путем редактирования файла crypto.properties с установкой нужных параметров, как показано в листинге 3.
Листинг 3. Пример файла crypto.properties
org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
org.apache.ws.security.crypto.merlin.file=sample.jks
org.apache.ws.security.crypto.merlin.keystore.type=jks
org.apache.ws.security.crypto.merlin.keystore.password=password
|
Компиляция SignEnvelope
Чтобы скомпилировать SignEnvelope.java, подайте команду, приведенную в листинге 4.
Примечание: При использовании Sun JDK нужно также извлечь Xalan-J из Apache и включить четыре файла .jar — serializer.jar, xalan.jar, xercesImpl.jar и
xml-apis.jar— в путь класса в командах, приведенных в листинге 4,
листинге 5 и листинге 6.
Листинг 4. Компиляция SignEnvelope.java с применением javac
$JAVA_HOME/bin/javac -cp \
wss4j-1.5.2.jar:xmlsec-1.4.1.jar:commons-logging-1.1.jar:commons-cli-1.1.jar:. \
SignEnvelope.java
|
Выполнение SignEnvelope
Теперь вы готовы подписывать документы! Java-программа вставляет в заголовок SOAP примера XML-документа подпись, которая по умолчанию вычисляется по всему телу SOAP. Можно уточнить, какие именно части XML-документа нужно подписывать, при помощи signer.setParts() из
WSS4J API. В данном примере используются параметры по умолчанию и вычисляется подпись по всему телу SOAP. Запустите свое приложение
SignEnvelope, указав:
- Входной XML-документ, который нужно подписать
- Куда вы хотите записать подписанный XML-документ
- Файл WSS4J crypto.properties, определяющий хранилище ключей
- Псевдоним записи в хранилище ключей
- Пароль для частного ключа
Листинг 5. Выполнение программы SignEnvelope
$JAVA_HOME/bin/java -cp \
wss4j-1.5.2.jar:xmlsec-1.4.1.jar:commons-logging-1.1.jar:commons-cli-1.1.jar:. \
SignEnvelope -in unsigned.xml -out signed.xml -prop crypto.properties -alias sample \
-keypass password |
Если не указать -v или флаг
--verbose при выполнении программы
SignEnvelope, она исполнится «молча», ничего не выводя на консоль. Если вам интересны шаги, которые выполняются в процессе, или если программа не выполнилась, и нужна помощь по ее отладке, добавьте в конец списка аргументов флаг -v или
--verbose. Пример выходных данных программы с этим флагом приведен в листинге 6.
Листинг 6. Выполнение программы SignEnvelope в «говорящем» режиме
$JAVA_HOME/bin/java -cp \
wss4j-1.5.2.jar:xmlsec-1.4.1.jar:commons-logging-1.1.jar:commons-cli-1.1.jar:. \
SignEnvelope -in unsigned.xml -out signed.xml -prop crypto.properties-v -alias sample \
-keypass password
Parsing command line arguments...
will load input XML from unsigned.xml ...
will output signed XML to signed.xml ...
will load crypto properties from crypto.properties ...
will use the entry with alias 'sample' ...
will use the key password 'password' ...
Parsing input XML file ...
Signing XML document ...
Creating Signature object ...
Creating WS-Security Header object ...
Creating Crypto object from crypto.properties ...
Writing Signature to WS-Security Header ...
Writing signed XML to signed.xml ...
Complete!
|
Теперь можно проверить документ, подписанный программой
SignEnvelope, чтобы убедиться, что конверт SOAP в
signed.xml подписан.
Листинг 7.
Проверка, что документ подписан
# cat signed.xml
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
wsu:Id="CertId-1828792" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
MIICFTCCAX6gAwIBAgIEaYxAxzANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDEwZzYW1wbGUwHhcNMDcwODMxMTI1OD
U0WhcNMDgwODMwMTI1ODU0WjARMQ8wDQYDVQQDEwZzYW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK4C
eWss1Fi4sUwMaPZ5Fkd1tcaNW+fMYLz4o1L9DpQqCarlaOeRhYc2PzLAmi6Qu04L17RksZov4Ioq57D9ZpWJDOvJ4e
JXlzDuRq3yAv8D0jD38CUJiyd2AuDYH2naYF575KDqo4JM23upQ9X3n72QP1uMXeWPdGXrQWGw72ufAgMBAAGjejB4
MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFA875O56gj3t1LTy5Z9VUGRwh858MDwGA1UdIwQ1MDOAFA875O56gj3t1L
Ty5Z9VUGRwh858oRWkEzARMQ8wDQYDVQQDEwZzYW1wbGWCBGmMQMcwCwYDVR0PBAQDAgK8MA0GCSqGSIb3DQEBBQUA
A4GBAIx2GglkdhoJ7HUaCZx1Ggl0dRoJxHAaCexwGgn8dBoJbHMaCfRyGgmMcRoJRHMaCcxyGglkcRoJhHQaCTR0Gg
mccBoJFHEaCQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABhbgAA
</wsse:BinarySecurityToken>
<ds:Signature Id="Signature-653534964" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-1367626116">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>lnfpDFV71XKNSFzG562nx+SzNrA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
Vtx5MScOPZNxjr9hq511Oy+8oAuZSMQhQgaNxMM/a+ud8g6eNYLfybCXhTbjpvNBwuWEXJhCP+i0BIVroHJSM6HYYb
7IMJha0zTG0RLhKLAlrbgQAtQ5qAwG2M/i1X0biqErLmCokMab/aUhDjMIuSCr5CZhqxI4F3E3Sp1HII0=
</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-1493981452">
<wsse:SecurityTokenReference wsu:Id="STRId-308417122" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Reference URI="#CertId-1828792" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="id-1367626116" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<books>
<book>
<title>War and Peace</title>
<author>Leo Tolstoy</author>
</book>
<book>
<title>The Catcher in the Rye</title>
<author>J. D. Salinger</author>
</book>
</books>
</soapenv:Body>
</soapenv:Envelope>
|
 |
Конфигурирование WebSphere
DataPower Integration Appliance XI50
Примечание: Все снимки с экрана и шаги по конфигурированию в настоящей статье используют версию 3.6.0.19 микропрограммного обеспечения WebSphere DataPower Integration Appliance XI50; шаги для других версий микропрограммного обеспечения (и устройства) могут несколько отличаться, но должны быть очень близки к приведенным ниже.
- Нажмите кнопку Keys and Certs
Management на панели управления DP WebGUI.
- Выберите Certificates и нажмите кнопку Add.
- Присвойте имя объекту Certificate (я использовал
pubcert).
- Нажмите кнопку Upload.
- Если у вас есть сертификат в формате Privacy Enhanced Mail (PEM), воспользуйтесь методом отправки файла:
найдите файл сертификата PEM и нажмите кнопку Upload.
- Если у вас есть только сертификат в хранилище ключей Java, используйте метод хранилища ключей Java: найдите файл хранилища ключей, введите пароль хранилища ключей, выберите открытый сертификат из развертывающегося списка и введите пароль для него.
Затем нажмите кнопку Upload.
- Дважды введите пароль для сертификата. Экран должен выглядеть как на рис. 4.
Рисунок 4. Конфигурирование объекта Crypto
Certificate
- Нажмите Apply.
- Щелкните на ссылке Control Panel в левой части WebGUI.
- На панели управления DP в WebGUI нажмите кнопку Keys and Certs
Management.
- Выберите Validation Credentials и нажмите кнопку Add.
- Введите имя объекта Validation Credentials, например,
sampleVC.
- Поставьте объект Certificate, созданный на шагах 3-5, в соответствие объекту Validation
Credentials, выбрав его из всплывающего окна, затем нажмите кнопку
Add. Должна появиться форма, подобная изображенной на рис. 5.
Рисунок 5. Конфигурирование объекта Crypto Validation Credentials
- Нажмите кнопку Apply.
- На панели управления DP в WebGUI нажмите кнопку XML Firewall.
- Нажмите кнопку Add Advanced.
- Присвойте имя объекту XML Firewall.
- Выберите
loopback-proxy для Firewall Type и удостоверьтесь в правильности номера порта. Затем должна появиться форма, подобная изображенной на рис. 6.
Рисунок 6. Конфигурирование объекта XML Firewall
- Нажмите кнопку + рядом с Firewall Policy, чтобы создать новую политику межсетевого экрана.
- Присвойте имя политике межсетевого экрана.
- Сконфигурируйте нужное правило сопоставления для этой политики.
- Отбуксируйте в правило действие Verify, как показано на рис. 7. Дважды щелкните на нем, чтобы вывести экран конфигурации Verify Action.
Рисунок 7. Конфигурирование политики межсетевого экрана XML
- Выберите из развертывающегося списка объект Validation Credentials, созданный на шагах 7-11 (см. рис. 8).
- Нажмите кнопку Done.
Рисунок 8. Конфигурирование объекта Verify Action
- Отбуксируйте в правило действие Results, дважды щелкните на нем и нажмите кнопку
Done, чтобы вызвать параметры по умолчанию.
- Измените направление действия правила на Client to Server.
- Убедитесь, что Policy совпадает с изображением на рис. 9, затем нажмите кнопку
Apply рядом с Rule Actions.
Рисунок 9. Конфигурирование политики XML Firewall
- Нажмите кнопку Close в верхней части окна конфигурирования политики. Должна появиться конфигурация XML Firewall, как показано на рис. 10.
- Чтобы создать XML Firewall, нажмите кнопку Apply в верхней части окна конфигурирования XML Firewall.
Рисунок 10. Конфигурирование объекта XML Firewall
 |
Проверка реализации
Используя приложение wget, поместите подписанный файл XML в WebSphere DataPower Integration Appliance XI50. В выходных данных листинга 9 видно, что подписанный документ успешно передан в клиентскую систему; это означает, что верификация подписи прошла успешно.
Листинг 9. Тестирование процесса верификации в WebSphere DataPower Integration Appliance XI50
# wget -q -O - -S --post-file=signed.xml http://xi50b:2063/sign
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
wsu:Id="CertId-1828792" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
MIICFTCCAX6gAwIBAgIEaYxAxzANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDEwZzYW1wbGUwHhcNMDcwODMxMTI1OD
U0WhcNMDgwODMwMTI1ODU0WjARMQ8wDQYDVQQDEwZzYW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK4C
eWss1Fi4sUwMaPZ5Fkd1tcaNW+fMYLz4o1L9DpQqCarlaOeRhYc2PzLAmi6Qu04L17RksZov4Ioq57D9ZpWJDOvJ4e
JXlzDuRq3yAv8D0jD38CUJiyd2AuDYH2naYF575KDqo4JM23upQ9X3n72QP1uMXeWPdGXrQWGw72ufAgMBAAGjejB4
MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFA875O56gj3t1LTy5Z9VUGRwh858MDwGA1UdIwQ1MDOAFA875O56gj3t1L
Ty5Z9VUGRwh858oRWkEzARMQ8wDQYDVQQDEwZzYW1wbGWCBGmMQMcwCwYDVR0PBAQDAgK8MA0GCSqGSIb3DQEBBQUA
A4GBAIx2GglkdhoJ7HUaCZx1Ggl0dRoJxHAaCexwGgn8dBoJbHMaCfRyGgmMcRoJRHMaCcxyGglkcRoJhHQaCTR0Gg
mccBoJFHEaCQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABhbgAA
</wsse:BinarySecurityToken>
<ds:Signature Id="Signature-653534964" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-1367626116">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>lnfpDFV71XKNSFzG562nx+SzNrA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
Vtx5MScOPZNxjr9hq511Oy+8oAuZSMQhQgaNxMM/a+ud8g6eNYLfybCXhTbjpvNBwuWEXJhCP+i0BIVroHJSM6HYYb
7IMJha0zTG0RLhKLAlrbgQAtQ5qAwG2M/i1X0biqErLmCokMab/aUhDjMIuSCr5CZhqxI4F3E3Sp1HII0=
</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-1493981452">
<wsse:SecurityTokenReference wsu:Id="STRId-308417122" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Reference URI="#CertId-1828792" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="id-1367626116" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<books>
<book>
<title>War and Peace</title>
<author>Leo Tolstoy</author>
</book>
<book>
<title>The Catcher in the Rye</title>
<author>J. D. Salinger</author>
</book>
</books>
</soapenv:Body>
</soapenv:Envelope>
|
Можно также проверить логи устройства XI50, чтобы убедиться, что подпись действительно верифицирована (см. листинг 10).
Листинг 10. Проверка того, что верификация прошла успешно
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]:
New transaction(conn use=1): POST http://xi50b:2063/ from 9.37.211.146
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]:
rule (verifyDocPolicy_Rule_0): selected via match 'AllURLs' from processing policy
'verifyDocPolicy'
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]: Multistep Probe enabled
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]: Accept set
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]: Accept set
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]:
Signature verification succeeded
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]:
rule (verifyDocPolicy_Rule_0): #1 filter: 'INPUT store:///verify.xsl' completed ok.
xmlfirewall(verifyDocuments): tid(79808)[request][9.37.211.146]:
rule (verifyDocPolicy_Rule_0): #2 results: 'generated from INPUT' completed ok.
xmlfirewall(verifyDocuments): tid(79808)[9.37.211.146]: Latency:
0 0 0 0 44 36 1 44 0 0 0 44 0 0 0 0 [http://xi50b:2063/]
|
Теперь давайте внесем небольшое изменение в тело конверта SOAP. Это должно сделать подпись недействительной, и верификация пройти не должна (см. листинг 11).
Листинг 11. Изменение тела SOAP
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"
wsu:Id="CertId-1828792" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
MIICFTCCAX6gAwIBAgIEaYxAxzANBgkqhkiG9w0BAQUFADARMQ8wDQYDVQQDEwZzYW1wbGUwHhcNMDcwODMxMTI1OD
U0WhcNMDgwODMwMTI1ODU0WjARMQ8wDQYDVQQDEwZzYW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAK4C
eWss1Fi4sUwMaPZ5Fkd1tcaNW+fMYLz4o1L9DpQqCarlaOeRhYc2PzLAmi6Qu04L17RksZov4Ioq57D9ZpWJDOvJ4e
JXlzDuRq3yAv8D0jD38CUJiyd2AuDYH2naYF575KDqo4JM23upQ9X3n72QP1uMXeWPdGXrQWGw72ufAgMBAAGjejB4
MAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFA875O56gj3t1LTy5Z9VUGRwh858MDwGA1UdIwQ1MDOAFA875O56gj3t1L
Ty5Z9VUGRwh858oRWkEzARMQ8wDQYDVQQDEwZzYW1wbGWCBGmMQMcwCwYDVR0PBAQDAgK8MA0GCSqGSIb3DQEBBQUA
A4GBAIx2GglkdhoJ7HUaCZx1Ggl0dRoJxHAaCexwGgn8dBoJbHMaCfRyGgmMcRoJRHMaCcxyGglkcRoJhHQaCTR0Gg
mccBoJFHEaCQAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABhbgAA
</wsse:BinarySecurityToken><ds:Signature Id="Signature-653534964"
xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#id-1367626116">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>lnfpDFV71XKNSFzG562nx+SzNrA=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
Vtx5MScOPZNxjr9hq511Oy+8oAuZSMQhQgaNxMM/a+ud8g6eNYLfybCXhTbjpvNBwuWEXJhCP+i0BIVroHJSM6HYYb
7IMJha0zTG0RLhKLAlrbgQAtQ5qAwG2M/i1X0biqErLmCokMab/aUhDjMIuSCr5CZhqxI4F3E3Sp1HII0=
</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-1493981452">
<wsse:SecurityTokenReference wsu:Id="STRId-308417122" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:Reference URI="#CertId-1828792" ValueType=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"/>
</wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature>
</wsse:Security>
</soapenv:Header>
<soapenv:Body wsu:Id="id-1367626116" xmlns:wsu=
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<books>
<book>
<title>War and Peace</title>
<author>John Grisham</author>
</book>
<book>
<title>The Catcher in the Rye</title>
<author>J. D. Salinger</author>
</book>
</books>
</soapenv:Body>
</soapenv:Envelope>
|
С помощью приложения wget передайте (измененный) подписанный файл XML в WebSphere DataPower Integration Appliance XI50. В выходных данных листинга 12 вы увидите, что в процессе обработки документа произошла ошибка, на что указывает сообщение об ошибке HTTP 500.
Листинг 12. Изменение тела SOAP
# wget -O - -S --post-file=signed2.xml http://xi50b:2063/
http://xi50b:2063/ => `-'
Resolving xi50b... 9.42.131.159
Connecting to xi50b|9.42.131.159|:2063... connected.
HTTP request sent, awaiting response...
HTTP/1.1 500 Internal Server Error
Connection: close
Content-Type: text/xml; charset="utf-8"
10:15:47 ERROR 500: Internal Server Error.
|
Теперь можно проверить логи устройства XI50 и убедиться, что ошибку действительно вызвала неверная подпись (см. листинг 13).
Листинг 13. Проверка журнала регистрации сообщений WebSphere DataPower Integration Appliance XI50
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
New transaction(conn use=1): POST http://xi50b:2063/ from 9.37.211.146
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
rule (verifyDocPolicy_Rule_0): selected via match 'AllURLs' from processing policy
'verifyDocPolicy'
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]: Multistep Probe enabled
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]: Accept set
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]: Accept set
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
Reject set: Hash values do not match
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
Execution of 'store:///verify.xsl' aborted: Hash values do not match.
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
request verifyDocPolicy_Rule_0 #1 filter: 'INPUT store:///verify.xsl' failed: Hash values
do not match.
xmlfirewall(verifyDocuments): tid(79606)[request][9.37.211.146]:
rule (verifyDocPolicy_Rule_0): #1 results: 'generated from INPUT' completed ok.
xmlfirewall(verifyDocuments): tid(79606)[9.37.211.146]:
Rejected by filter; SOAP fault sent
xmlfirewall(verifyDocuments): tid(79606)[9.37.211.146]:
Generated error on URL 'http://xi50b:2063/':
<?xml version="1.0" encoding="UTF-8"?><env:Envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<env:Fault>
<faultcode>env:Client</faultcode>
<faultstring>Hash values do not match. (from client)</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
xmlfirewall(verifyDocuments): tid(79606)[error][9.37.211.146]:
Rejected by filter; SOAP fault sent
xmlfirewall(verifyDocuments): tid(79606)[error][9.37.211.146]:
No match from processing policy 'verifyDocPolicy' for code '0x00d30003'
|
Как показано в листинге 13, верификация подписи не удалась из-за несовпадения значений контрольной суммы. Этого следовало ожидать, так как мы изменили содержание сообщения после его отправки!
Заключение
В этой статье показано, как использовать устройства
IBM
WebSphere DataPower SOA Appliances вместе с библиотекой Apache WSS4J для подписания XML-документов и проверки их аутентичности, целостности и неотвергаемости. В ней содержится краткий обзор подписей XML и библиотеки Apache WSS4J, а также обзор программно-аппаратных комплексов WebSphere DataPower SOA Appliances. В статье приведен простой пример сценария с использованием эффективных и наращиваемых возможностей WebSphere DataPower SOA
Appliances по криптографической обработке XML для проверки того, что подпись XML действительно была добавлена Java-программой, использующей библиотеку WSS4J.
Загрузка | Описание | Имя | Размер | Метод загрузки |
|---|
| Пример файлов Java и XML для этой статьи | wss4jExample.zip | 9KБ | HTTP |
|---|
Ресурсы Научиться
Получить продукты и технологии
Обсудить
Об авторе  | 
|  | >Боб Каллауэй (Bob Callaway) работает инженером-программистом в Институте технологии WebSphere (WebSphere Technology Institute – WSTI). Он участвует в исследованиях и разработках по интеграции промежуточного ПО с ориентированными на приложения сетевыми технологиями. До поступления в WSTI он работал в группе IBM xSeries® xPert Team над проектами IBM BladeCenter®. Он имеет три ученые степени Университета штата Северная Каролина: бакалавра наук по электротехнике, бакалавра наук по вычислительной технике и магистра наук по компьютерным сетям. Сейчас он является кандидатом в доктора философии по вычислительной технике в Университете штата Северная Каролина по специальности «сервис-ориентированные сетевые технологии». В 2007-2008 академическом году он был удостоен престижной стипендии IBM PhD Fellowship. |
Выскажите мнение об этой странице
|  |