Главная страница

Разработка веб-служб средствами Java. Ильдар ХабибуллинРазработкаWebслужбсредствами


Скачать 9.24 Mb.
НазваниеИльдар ХабибуллинРазработкаWebслужбсредствами
АнкорРазработка веб-служб средствами Java.pdf
Дата03.02.2018
Размер9.24 Mb.
Формат файлаpdf
Имя файлаРазработка веб-служб средствами Java.pdf
ТипКнига
#15148
КатегорияИнформатика. Вычислительная техника
страница17 из 21
1   ...   13   14   15   16   17   18   19   20   21
*
[?]
id=""> [?]
[?]
[?]
id="">

id=""> [*]

Глава 7. Web Services как часть J2EE 327
id="">
id="">
id=""> [?]
[*]
id="">


[*]
В листинге 7.9 приведен конфигурационный файл Web-службы "HelloService", построенной в листингах 7.3, 7.4, 7.7.
* Листинг 7.9. Конфигурационный файл Web-службы "HelloService"
version="1.0"
PUBLIC
"-//IBM Corporation, Inc.//DTD J2EE Web services 1.0//EN"



HelloService


328 Разработка Web-служб средствами Java




HelloEJB


Конфигурационный файл клиента
Второй конфигурационный файл с именем
— это XML- файл с корневым элементом
В него заносятся ссылки на другие Web-службы, чьими услугами пользуется данная Web-служба. В
этой ситуации данная Web-служба является клиентом тех Web-служб, на которые делается ссылка. Отсюда происходит название файла и корневого элемента.
Каждая ссылка описывается внутри элемента . Если данная ссылка находиться в области действия компонента, описанного в файле ear-jar.xml или в файле web.xml, то элемент помещает-

Глава 7. Web Services как часть J2EE 329
ся внутрь элемента в котором элементом отмечается имя компонента.
Все остальные элементы вложены в элемент .
В элементе дается имя ссылке. Это имя используется клиентом при поиске Web-службы методом lookup () в системе именования
JNDI. Рекомендуется начинать имя со строки "service/".
В элементе указывается полное имя фабрики классов,
обычно это интерфейс или его расширение.
Остальные элементы, вложенные в элемент , необязательны.
Элементы и
указывают расположение
WSDL-файла и JAX-RPC-файла в модуле.
Элемент содержит расширенное имя
XML- элемента WSDL-файла, описывающего Web-службу. Он записывается толь- ко в том случае, когда в файле есть элемент , а соответствую- щий WSDL-файл содержит несколько элементов
Элемент связывает полное имя с
именем определенным в элементе name> файла
Эта связка используется затем контейнером при обращении клиента к методу getPort о для получения заглушки.
Наконец, элементы описывают классы-обработчики SOAP- послания. Порт, к которому приписан обработчик, указывается вложенным элементом
Если порт не указан, то обработчик приписывается ко всем портам.
В листинге 7.10 приведена полная схема конфигурационного файла webservicesclient.xml.
Листинг
Структура конфигурационного файла клиента ;
id="">
id=""> [+]
[+]

[+]
[?]
[?]

Разработка Web-служб средствами Java
id=""> [?]
id=""> [?]
id="">
id="">
id="">?
[?]
[?]
id="">
[*]
id="">
id=""> [?]
[*]
id=""> [?]
id=""> [?]
[?]
[?]
id="">
id="">
[*]
id="">
id="">
[?]

[*]


Глава 7. Web Services как часть J2EE 331
[*]
id=""> [*]

В листинге 7.11 приведен пример простого конфигурационного файла кли- ента Web-службы "HelloService", описанной в конфигурационном файле листинга 7.9.
' Листинг
Конфигурационный файл клиента Web-службы "HelloService"
version="1.0" encoding="UTF-8"?>
PUBLIC
"-//IBM Corporation, Inc.//DTD J2EE Web services client 1.0//EN"






Разработка Web-служб средствами Java


Конфигурационный файл JAX-RPC
У третьего конфигурационного файла, который мы назвали JAX-RPC- файлом, нет определенного имени, обычно его имя складывается из имени порта и слова "Mapping". Этот файл хранится в одном каталоге с WSDL- файлом, то есть, в каталоге WEB-INF или в каталоге META-INF.
В самом простом случае, когда WSDL-файл описывает только один элемент с одним вложенным элементом , в каждый элемент вложен только один элемент и не больше одного элемента используются только типы WSDL и значения по умолчанию и так далее, в этом случае в корневом элементе обязательны ТОЛЬКО
.
Элемент связывает пакет Java, указанный во вложенном элементе
, с идентификатором пространства имен, опреде- ленным в WSDL-файле. Идентификатор указывается во вложенном элемен- те
В остальных случаях в корневой элемент надо обяза- тельно вложить по одному элементу для каждого типа, введенного в WSDL-файле, по одному элементу
для каждого WSDL-элемента и по одному элементу — для каждого нестандартного WSDL-элемента
Кроме ТОГО,
ВЛОЖИТЬ ПО ОДНОМУ Элементу < s e r v i c e - endpoint-interface-mapping> для каждой комбинации WSDL-элементов
И
В листинге 7.12 приведена полная схема конфигурационного JAX-RPC-файла.
Листинг
Структура конфигурационного файла
id="">
[+]

Глава 7. Web Services как часть
333
id="">
id="">
id=""> [*]

id="">
id="">

id="">
[*]
id="">
id=""> [?]
id="">


[*]




[?]
[+]


id=""> [?]
id="">
id="">
[*]
id="">

[+]
id="">

334 Разработка Web-служб средствами Java





[*]
id="">
id="">
[*]
id="">
id="">
id="">
[?]

id="">

id="">
id="">


В листинге 7.13 приведен JAX-RPC-файл Web-службы "HelloService". Его имя HelloMapping.xml.
Листинг
Конфигурационный JAX-RPC-файл Web-службы "helloService"
PUBLIC

Глава 7. Web Services как часть J2EE 335
"-//IBM Corporation, Inc.//DTD J2EE JAX-RPC mapping 1.0//EN"
ava-wsdl-mapping>
hello
Установка Web-службы в контейнер
Поскольку по спецификации "Web Services for J2EE" Web-служба реализует- ся с помощью или session-компонентов, ее надо установить
(deploy) в Web- или EJB-контейнер как всякий компонент J2EE- приложения. В процессе установки создаются клиентские заглушки и сер- верные связки системы RMI, каталоги для их размещения, пути к ним и переменные окружения, составляющие контекст приложения. Правила ус- тановки описаны, например, в книге [10]. Производители предоставляют утилиты установки, облегчающие этот процесс. В стандарт- ную поставку пакета J2EE SDK входит графическая утилита которая открывает последовательно несколько диалоговых окон, собирая сведения об устанавливаемом компоненте, и затем устанавливает компонент в контейнер.
Утилита установки Web-службы, реализованной по правилам спецификации
WS4EE, должна учитывать, что Web-служба работает под управлением ме- ханизма JAX-RPC, а не механизма RMI. Кроме того, в процессе установки надо создать или использовать несколько конфигурационных файлов:
WSDL-файл, конфигурационный файл компонента или конфигурационный файл Web-службы конфигурационный файл клиента и JAX-RPC-файл. Поэтому для Web- службы надо использовать специализированные средства установки.
Фирма IBM поставляет эталонную реализацию (RI — Reference
Implementation) спецификации "Web Services for J2EE" со своего сайта
http://www-106.ibm.com/developerworks/webservices/. В нее входят классы,
полностью реализующие интерфейсы спецификации, вспомогательные классы и утилиты. Классы эталонной реализации расширяют пакет классов

Разработка Web-служб средствами Java
J2EE SDK, образующих J2EE-cepBep и используются Web-службами, уста- новленными на этом сервере.
Для построения Web-службы эталонная реализация предлагает утилиту svcgen (Web Service Generator), работающую из командной строки. Ее мож- но использовать двумя способами: или для создания Web-службы по уже откомпилированным интерфейсам и классам, или для создания Web- службы по ее описанию
В первом случае командная строка выглядит так:
$ svcgen [
] -sei
\
-map
-wsdl
В этой строке необязательный параметр -classpath указывает путь к клас- сам Web-службы. Параметр -sei содержит краткое имя без расширения
Параметр связывает идентификатор целевого про- странства имен создаваемого утилитой WSDL-файла с пакетом классов Java.
Параметр -wsdl содержит имя создаваемого утилитой WSDL-файла.
Во втором случае командная строка выглядит иначе:
$ svcgen -wsdl
-map
[ - d i r
]
Здесь параметр -wsdl содержит имя уже существующего WSDL-файла. Па- раметр определяет имя создаваемого пакета Java. Необязательный па- раметр -dir указывает имя каталога, в который будут помещены создавае- мые утилитой файлы Java и JAX-RPC-файл, имя которого повторяет имя
WSDL-файла с окончанием
Если этот параметр опущен,
то файлы будут помещены в каталог
Создан- ные файлы надо просмотреть, добавить в них фактический код Web-службы и откомпилировать.
После создания Web-службы ее надо упаковать в архив application.ear обыч- ными средствами J2EE-cepBepa, например, утилитой
При упа- ковке надо включить в архив файл а для клиента файл
Это можно сделать впоследствии утилитой wsdd.
Установка созданной и упакованной Web-службы выполняется утилитой
Ее командная строка выглядит так:
$ wsdepioy [
]
Первый параметр —исходный архив — должен находиться в те- кущем каталоге. Утилита создает файл с именем полно- стью готовый для утилиты deploytooi. Если указан второй параметр
, то утилита создаст архив, содержащий все необходимое для установки клиента Web-службы. Затем утилита wsdepioy вызывает утилиту deploytooi, которая заканчивает процесс установки.

ГЛАВА 8
Безопасность
предоставления услуг
Сфера применения Web-служб стремительно расширяется. В настоящее время в нее вовлекаются банковские транзакции, финансовые операции,
медицинские консультации — те Web-услуги, которые требуют секретности,
точности, достоверности. Это заставляет обращать особенное внимание на безопасность предоставления услуг.
Вопросы безопасности обсуждаются с тех самых пор, как люди стали пре- доставлять и получать услуги. При заключении всякой сделки важно убе- диться в том, что она будет совершена точно, в срок, с соблюдением всех оговоренных условий. Применительно к Web-услугам можно выделить пять основных проблем безопасности.
Конфиденциальность (confidentiality) данных. Сообщения, пересылаемые между Web-службой и ее клиентами, не должны читаться никем, кроме отправителя и получателя. Конфиденциальность достигается шифрова- нием сообщений.
Целостность (integrity) данных. Клиент и Web-служба должны быть уве- рены, что данные во время пересылки не изменились посторонними ли- цами или аппаратными средствами. Уверенность в целостности сообще- ния обеспечивается цифровой подписью или добавлением дайджеста со- общения
(Message Digest).
Аутентификация (authentication) партнера или сообщения. И клиент, и
Web-служба должны быть уверены, что имеют дело с тем партнером, за кого он себя выдает. Для этого сообщение подписывается цифровой подписью, известной другой стороне, или к сообщению прилагается цифровой сертификат.
12 748

338 Разработка Web-служб средствами Java
Авторизация (authorization) клиента. Клиент может получить только те услуги, которые он имеет право получать. Это достигается разными спо- собами: назначением ролей, составлением списков доступа ACL (Access
Control Lists), выбором политики доступа.
Неаннулируемость (nonrepudiation) услуг. И клиент, и Web-служба долж- ны быть уверены, что другая сторона строго выполнит взятые на себя обязательства. Этого можно достигнуть при помощи цифровой подписи или
Как видно из этого перечня, за многие века обмена услугами выработаны и методы решения проблем безопасности. Давно существует и бурно развива- ется целая наука — криптография. Приведем краткое описание ее основных
Криптография
Криптография занимается разработкой методов обработки данных с целью сокрытия их смысла. Для этого одним из множества алгоритмов шифрова- ния исходное сообщение преобразуется в бессмысленный набор битов, ко- торый можно быстро преобразовать обратно в первоначальный текст, толь- ко зная ключ (key) шифрования. Секретность ключа обеспечивает конфи- денциальность сообщения.
Различают два вида ключей: симметричные (закрытые) ключи, и асиммет-
ричные (открытый и закрытый) ключи.
Симметричные ключи
Шифрование и расшифровка сообщения производятся с помощью одного и того же ключа, поэтому он и называется симметричным ключом. Алго- ритмы шифрования с симметричным ключом работают быстро и надежно.
Их надежность напрямую зависит от длины ключа — чем длиннее ключ,
тем больше времени требует дешифровка сообщения. (Дешифровкой назы- вается попытка чтения зашифрованного сообщения без знания ключа.)
Наиболее распространены следующие алгоритмы, применяющие симмет- ричные
• Широко распространен алгоритм DES (Data Encryption Standard) с 56- разрядным ключом. Это стандарт для защиты от несанкционированного доступа к служебной документации в государственных учреждениях
США.
• В России для тех же целей применяется ГОСТ
Он использует
256-разрядный ключ.

Глава 8. Безопасность предоставления услуг 339
• Алгоритм DES часто применяется к сообщению трижды с разными клю- чами. Эта схема шифрования называется
или 3DES.
• Международный алгоритм шифрования данных IDEA (International Data
Encryption Algorithm) использует 128-разрядный ключ.
• Алгоритмы Брюса Шнайера (Bruce Schneier)
с 56-разрядным ключом, и в котором длина ключа достигает 256 разрядов, не запатентованы и свободно доступны в Интернете по адресу
Широко распространена целая серия алгоритмов Рональда Ривеста
(Ronald Rivest) RC2, RC4, RC5, RC6. Они различаются скоростью шиф- рования и длиной секретного ключа.
Вся проблема заключается в передаче секретного ключа. Обеспечить ее конфиденциальность не менее важно и не менее трудно, чем обеспечить конфиденциальность самого сообщения. Очень часто эту проблему решают применением асимметричных ключей, при помощи которых передается секретный симметричный ключ.
Асимметричные ключи
В этом случае у каждого участника обмена сообщениями — Web-службы и ее клиента — есть по два ключа — открытый (public key), известный всем,
и закрытый (private key), известный только самому участнику. Открытый ключ предназначен для шифрования сообщения, закрытый — для рас- шифровки. Клиент шифрует свое сообщение открытым ключом Web- службы и посылает шифровку вместе со своим открытым ключом. Зашиф- рованное сообщение может прочитать только Web-служба, которой оно предназначено. Web-служба расшифровывает его своим закрытым ключом,
читает, составляет ответ, и шифрует ответное сообщение открытым ключом клиента. Зашифрованный ответ может прочитать только клиент, расшифро- вав его своим закрытым ключом.
Итак, при использовании асимметричных ключей вместе с зашифрованным сообщением или до посылается открытый ключ отправителя.
Разработано множество алгоритмов шифрования с асимметричными ключами.
• Алгоритм DSA (Digital Signature Algorithm) позволяет использовать ключи любого размера. Алгоритм стандартизирован, стандарт DSS (Digital
Signature Standard) рекомендует ключи длиной от 512 до 1024 двоичных разрядов. Алгоритм применяется, главным образом, для создания циф- ровой
• Алгоритм RSA, названный по первым буквам фамилий авторов (Rivest,
Shamir, Adleman), использует ключи длиной до 1024 битов.

340 Разработка Web-служб средствами Java
• Алгоритм Диффи-Хелмана DH
работает с ключами дли- ной до 4096 битов.
• Алгоритм
Тегера Эль-Гамала (Taher не запатентован,
он используется свободно.
В реальных криптографических системах симметричные и асимметричные ключи часто комбинируются. Например, известно, что шифрование откры- тым ключом занимает больше времени, чем шифрование секретным клю- чом. Для ускорения работы поступают так: сообщение шифруют симмет- ричным ключом, затем этот симметричный ключ шифруют открытым клю- чом получателя и отправляют вместе с зашифрованным сообщением.
Получатель сначала расшифровывает симметричный ключ своим закрытым ключом, а затем расшифровывает сообщение уже известным ему симмет- ричным
Дайджест сообщения
Иногда в результате шифрования получают короткий дайджест сообщения
MD (Message Digest), который посылают вместе с незашифрованным сооб- щением. Это делается не с целью достижения конфиденциальности, а для сохранения целостности послания. Получатель повторно шифрует сообще- ние тем же алгоритмом и сравнивает полученный дайджест с тем, который был прислан вместе с сообщением. Совпадение дайджестов гарантирует не- изменность сообщения по пути следования. Своеобразие дайджеста заклю- чается в том, что его не надо расшифровывать. Это позволяет применять для получения дайджеста мощные односторонние алгоритмы.
• В настоящее время наибольшее распространение получил алгоритм Ро- нальда Ривеста MD5, описанный в рекомендации RFC 1321. Он создает
128-разрядный дайджест.
• Алгоритм
(Secure Hash Algorithm) использует хеш-функцию для получения 160-разрядного дайджеста. У алгоритма есть расширения
SHA-256, SHA-384,
для получения более длинных дайджестов.
• В алгоритмах под общим названием MAC (Message Authentication Code)
кроме самого алгоритма используется и секретный ключ. Алгоритм ис- пользуется главным образом для создания цифровой подписи.
Цифровая подпись
Для решения задач аутентификации и неаннулируемости, сообщение часто снабжается цифровой подписью. В самом простом случае для получения цифровой подписи применяются асимметричные ключи обратным спосо-

Глава 8. Безопасность предоставления услуг 341
бом — автор сообщения шифрует его своим закрытым, а не открытым клю- чом. После этого всякий желающий может расшифровать сообщение от- крытым ключом автора и прочитать его. Поскольку закрытый ключ знает только автор, зашифровать сообщение мог только он. Этим подтверждается авторство сообщения.
Зашифровать сообщение можно и симметричным ключом, но потом его придется открыть для проверки авторства. Такой ключ будет одноразовым,
для следующего сообщения придется генерировать другой ключ.
В других случаях в качестве цифровой подписи используется дайджест со- общения, зашифрованный с помощью закрытого ключа автора. Адресат может получить тот же дайджест, используя открытый ключ автора сообще- ния, сравнить его с дайджестом самого сообщения и убедиться в авторстве сообщения.
Цифровой сертификат
Широкое распространение открытых ключей поставило задачу целостности и аутентификации самих открытых ключей. Отправитель, шифрующий со- общение открытым ключом адресата, должен быть уверен, что ключ дейст- вительно принадлежит адресату, а не подменен злоумышленником, высту- пающим от имени адресата. Для этого открытые ключи заверяются цифро- вой подписью, но подписью не адресата, а доверенного лица — центра сертификации СА (Certificate
Кроме открытого ключа и цифровой подписи, сертификат содержит сведе- ния о центре сертификации и пользователе ключа, время действия ключа,
назначение ключа: шифрование, цифровая подпись, дайджест. Структура сертификата и правила его использования определены международным стандартом ISO X.509.
Центры сертификации имеются во многих странах. Наиболее авторитетна организация VeriSign,
у которой есть сеть филиалов на нескольких сайтах Интернета.
Реализация криптографии в Java
В стандартную поставку Java 2 SDK, Standard Edition входят средства Security
API, реализующие многие криптографические алгоритмы. В Security API вхо- дит пакет JCA (Java Cryptography Architecture) и дополнение к нему — пакет
JCE (Java Cryptography Extension). Эти пакеты составлены из пакетов Java java. security,
crypto и их подпакетов, а также пакета и его подпакетов, содержащих средства генерации ключей,
шифрования, создания дайджестов и цифровых подписей. Кроме того,

342
Разработка Web-служб средствами Java
в Security API входит пакет и его подпакеты, содержа- щие средства аутентификации и авторизации и составляющие, вместе с дру- гими пакетами Java, пакет JAAS (Java Authentication and Authorization Service).
Классы, составляющие средства Security API, реализуют криптографические алгоритмы DES, IDEA, DSA, MD5,
RSA и другие, создают серти- фикаты по протоколу Х.509, связывают приложения Java с системой безо- пасности Kerberos.
Мы не будем здесь рассматривать Security API. Средства этого пакета подробно описаны в книге [13] и множестве других книг, посвященных безопасности Java. Текущая версия Security API полностью описана в документации к вашему набору J2SE SDK, в разделе
$JAVA_HOME/docs/guide/security/.
Безопасность на транспортном уровне
Сообщения Web-службы передаются по компьютерным сетям. Поэтому,
казалось бы, для безопасности их пересылки достаточно применить средст- ва сетевой безопасности. Одно из таких средств — протокол защищенных
соединений SSL (Secure Sockets Layer), запатентованный в США фирмой
Netscape Communication. Протокол работает поверх стека TCP/IP и основан на шифровании содержимого сетевых IP-пакетов с помощью симметричных или асимметричных ключей. Он описывает правила установления соедине- ния, открытия защищенных сокетов, обмена ключами, шифрования и пере- дачи данных. С ним тесно связан основанный на версии SSL 3.0 открытый протокол TLS (Transport Layer Secure), первая версия которого определена в рекомендации RFC 2246. Протокол TLS очень похож на SSL и призван за- менить его, но эти протоколы несовместимы.
Протоколы SSL и TLS могут применять разные алгоритмы шифрования, в том числе DES, RSA, SHA-1, MD5, RC2, RC4. Это позволяет найти общий алгоритм для клиента и сервера и практически всегда установить защищен- ное соединение. При этом алгоритмы шифрования с асимметричными клю- чами применяются при установлении связи и передаче сгенерированного секретного ключа, а алгоритмы с симметричными ключами — для пересыл- ки сообщений, зашифрованных полученным секретным ключом.
Технология Java реализовала протоколы SSL 3.0 и TLS в пакете JSSE (Java
Secure Socket Extension). Соответствующие пакеты Java входят в стандартную поставку J2SE SDK. Они под- робно описаны в книге [13] и в документации J2SE SDK.
Средства SSL и TLS удобны и хорошо обеспечивают конфиденциальность передаваемых данных, но у них нет собственных средств аутентификации.
Они должны получать сертификаты из какого-нибудь центра сертификации.

Глава 8, Безопасность предоставления услуг 343
Другое сетевое средство безопасности — виртуальная частная сеть VPN
(Virtual Private Network) — не требует сертификатов. Оно передает сообще- ния, зашифрованные на выходе из локальной сети маршрутизаторами или брандмауэрами. Аутентификация сообщений и клиентов производится маршрутизаторами или брандмауэрами на входе в локальную сеть. Вирту- альные частные сети требуют установки программного обеспечения на каж- дый сервер, маршрутизатор, брандмауэр и на каждую клиентскую машину,
что вызывает обычные проблемы совместимости версий и необходимости их обновления на каждой машине.
Виртуальная частная сеть создается, чаще всего, на основе стандартов сете- вого уровня
IPv6 или на основе протокола РРТР (Point-to-Point
Tunneling Protocol).
Средства сетевой безопасности транспортного уровня могут использоваться при организации защищенных Web-служб, но сильно ограничивают их применение. Во-первых, эти средства привязывают Web-службу к опреде- ленному протоколу: HTTPS,
SMTP, хотя основное достоинство Web- службы — ее переносимость и независимость от протоколов и платформы.
Во-вторых, эти средства шифруют все пересылаемое сообщение целиком, а
SOAP-послания по пути следования могут обрабатываться промежуточными
SOAP-узлами (actors). При этом промежуточный сервер должен расшифровать послание, обработать его и снова зашифровать для дальней- шей пересылки. Ясно, что после этого ни о какой секретности говорить не приходится.
Безопасность на уровне XML
Для того чтобы зашифровать не всё SOAP-послание, а только его отдельные части, придется перейти на уровень языка XML и пойти привычным пу- тем — ввести дополнительные элементы XML, описывающие зашифрован- ную часть послания.
Разработка средств описания зашифрованных XML-документов и их от- дельных частей ведется консорциумом W3C давно и независимо от прото- кола SOAP и Web-служб, причем этим занимается сразу несколько рабочих групп.
• Рабочая группа, определяющая правила описания шифрования документов выпустила предварительную версию рекомендации "XML Encryption
Syntax and Processing". Будем называть ее короче "XML Encryption". Ее можно посмотреть по адресу
Рабочая группа, разрабатывающая правила работы с цифровыми подпи- сями на языке XML, ее сайт пред- ложила две рекомендации: RFC 3275 описывает синтаксис цифровой

Разработка Web-служб средствами Java
подписи, a RFC 3076 — так называемую каноническую форму XML
(Canonical XML).
• Третья рабочая группа рассматривает работу с цифровыми сертифика- тами и разрабатывает правила обмена ключами шифрования. Она разработала спецификацию
(XML Key Management
Specification) и работает над ее второй версией. Ее можно посмотреть на сайте
Рассмотрим подробнее эти рекомендации и спецификации.
Шифрование документов
Документы XML или их отдельные элементы шифруются с использованием обычных алгоритмов криптографии. Задача состоит в том, чтобы выделить зашифрованную часть документа и описать способ ее шифрования.
Рекомендация "XML Encryption" вводит новый XML-элемент и вложенные в него элементы. Все элементы определены в пространстве имен с идентификатором
Они описывают метод шифрования, сам зашифрованный элемент и тому подобную информацию. При помощи элемента можно зашифровать группу вложенных XML-элементов, отдельный элемент или только его содержимое.
Допустим, что в некотором XML-документе есть элементы и нам надо зашифровать элемент содержащий секретный номер абонента. Это можно сделать двумя способами.
Первый способ — зашифровать только содержимое элемента:

Второй способ — зашифровать весь элемент

Глава 8. Безопасность предоставления услуг 345
<!— вложенные элементы с зашифрованным элементом —>
Обратите внимание на то, как изменился атрибут
— вместо заключи- тельного указания "content" атрибут содержит слово "Element".
Вообще же у элемента четыре необязательных атрибута:
• атрибут содержит идентификатор элемента , полез- ный для последующих ссылок на элемент;
• атрибут туре содержит тип зашифрованной информации в виде стро- ки URI;
• атрибут указывает зашифрованной информации обычной строкой или строкой URI;
• атрибут Encoding указывает кодировку содержимого в виде строки URI.
Остальные атрибуты описывают идентификаторы пространств имен; очень часто они выглядят так:
В элемент вкладываются четыре элемента.
• Элемент ОПИСЫВаеТ
ШИфрО-
вания своим обязательным атрибутом Algorithm. В этот элемент можно вложить элемент , содержащий длину ключа.
и другие элементы, например, для записи параметров алгоритма RSA-
ОАЕР специально предназначен вложенный элемент
Элемент можно опустить, если алгоритм шифрова- ния был оговорен заранее.
• Элемент описывает применяемые ключи шифрования.
Как видно из его префикса, он определен в пространстве имен с иден- тификатором
Это пространство имен цифровой подписи, оно описано в следующем разделе. Дополнительно в этот элемент можно вложить элемент , описывающий метод шифрования ключа, если ключ шифруется, и элемент описывающий метод обмена ключами.
• Элемент описывает сами зашифрованные данные.

346 Разработка Web-служб средствами Java
• Элемент содержит дополнительную информа-
ЦИЮ ВО
В него элементах .
Из этих элементов обязателен только элемент . Именно в нем,
во вложенном в него элементе содержится зашифрованная информация. Это двоичная информация, но она записывается в кодировке
Base64.
Таким образом, минимальный состав элемента примерно таков:




Вместо элемента
В

элемент — строкой URI. В элемент
МОЖНО ВЛОЖИТЬ элемент , а В него —
один или несколько элементов описывающих методы дополнительного преобразования извлеченной по ссылке зашифрованной информации. Например, извлеченную зашифрованную информацию можно переслать в кодировке Base64, для этого надо записать такое пре- образование:



Глава 8. Безопасность предоставления услуг 347
Структура элемента , описывающего зашифрованный ключ,
повторяет структуру элемента с добавлением элемента
В
элементы и/или элементы U R I = " " >
своим атрибутом указывают идентификаторы (значения атрибутов элементов, использующих описы- ваемый зашифрованный ключ.
Элемент описывает способ генерации ключей и обмена ими. Сторона, генерирующая ключ, описывается вложенным элементом а сторона, получающая ключ — вложенным элемен- том
Факт пересылки ключа отмечается вложенным элементом , чтобы не сгенерировать дважды один и тот же ключ.
Полная схема вложенности элементов показана в листинге 8.1.
- Листинг 8.1. Вложенность элементов шифрования
Encoding=""[?]
[?]
[?]
[?]
Algorithm=""> [?]

[?]
(? ]
[?]
[?]
Algorithm=""> [?]


348 Разработка Web-служб средствами Java
|



[?]
[*]
[*]

Algorithm=""> [?]
[?]
[?]
[?]


Algorithm="">


[?]

Глава 8. Безопасность предоставления услуг 349
[+]

Цифровая подпись документа XML
Правила создания цифровой подписи документа XML определены в реко- мендации RFC 3275. Суть рекомендации в том, что создаются дайджесты подписываемой информации, они вкладываются в элемент вместе с нужными пояснениями. Затем создается дайджест этого элемента,
который подписывается цифровой подписью. Элемент опре- делен в спецификации RFC 3275.
Все это вкладывается в корневой элемент цифровой подписи ,
тоже определенный в рекомендации RFC 3275. Непосредственно в элемент
вкладывается два обязательных элемента и
а также необязательный элемент и нуль или несколько элементов . Все элементы определены в пространстве имен с
Элемент как следует из его названия, описывает способ по- лучения цифровой подписи. Это выполняется двумя обязательными вло- женными
И
Кроме того, элемент описывает подписываемую информа- цию, это делается третьим обязательным вложенным элементом
Элемент указывает способ приведения элемен- та к каноническому виду XML. Способ указывается обяза- тельным атрибутом Algorithm. В этот элемент можно вложить произволь- ные элементы, характерные для данного метода приведения к канониче- скому виду.
Элемент указывает алгоритм шифрования элемента
. Алгоритм атрибутом Algorithm,
например:
/>
Здесь указан комбинированный алгоритм шифрования DSA-SHA1.
В элемент можно вложить произвольные элементы, ха- рактерные для выбранного алгоритма шифрования.

350 Разработка Web-служб средствами Java
Элемент может появиться несколько раз, поскольку подписы- ваемая информация может состоять из нескольких документов XML, доку- ментов HTML или их частей, файлов с графическими изображениями, зву- ковых файлов и других ресурсов. Каждый ресурс, которым может быть и часть документа, описывается своим элементом и указывается атрибутом этого элемента, например:
В этом примере создается дайджест части внешнего документа
По- лученная цифровая подпись (detached signature) хранится отдельно от под- писанного документа.
Цифровая подпись может быть вложена в сам подписываемый документ
(enveloped signature). В этом случае ссылка будет выглядеть так:
Для каждого ресурса создается свой дайджест.
Каждый элемент содержит необязательный вложенный эле- мент , задающий вложенными элементами мето- ды предварительного преобразования подписываемого ресурса, например,
преобразование к каноническому виду
Кроме того, элемент
должен содержать два обязательных элемента: элемент указывает алгоритм получения дайджеста обязательным ат- рибутом Algorithm, а элемент содержит дайджест в кодиров- ке Base64. Например:

Algorithm=
/>
Здесь для получения дайджеста файла выбран алгоритм SHA-1.
Файл sign.xml предварительно приводится к каноническому виду XML.
Элемент содержит цифровую подпись в кодировке Base64.
Элемент описывает информацию об открытом ключе, с помощью которого проверяется подпись. Ключом может быть и цифровой сертифи- кат. Элемент может отсутствовать, если получателю известен ключ. Информация содержится во вложенных элементах, некоторые эле- менты определены спецификацией. Это элементы ,
, ,
, ,
ры цифровых подписей могут добавить другие элементы.

Глава 8. Безопасность предоставления услуг 351
Элементы определяют дополнительные свойства цифровой подпи- си, например, дату и время подписания, элементами и другими элементами.
Листинг 8.2 показывает схему вложенности элементов, описывающих циф- ровую
Листинг 8.2. Вложенность элементов цифровой подписи


URI="" [?] > [+]
[?]
[+]


[?]



[+]

I d = " " [?]> [*]

352 Разработка Web-служб средствами Java

[+]


[+]
Канонический вид XML
При создании цифровой подписи имеет значение каждый символ подписы- ваемого документа. Даже разное количество пробелов между словами при- ведет к разным цифровым подписям. Для того чтобы цифровая подпись зависела только от содержания документа, но не от его оформления, доку- мент сначала приводится к каноническому виду, а потом подписывается.
Метод приведения к каноническому виду указывается атрибутом элемента
Канонический вид документа XML и правила приведения к нему описаны в рекомендации RFC 3076, называемой "Canonical XML". По рекомендации
RFC 3076 документ записывается в кодировке UTF-8, все ссылки разреша- ются, пробельные символы нормализуются, заголовки XML удаляются, пус- тые элементы записываются парой из открывающего и закрывающего тега,
записываются значения по умолчанию всех опущенных атрибутов и так да- лее. Если приведение к каноническому виду выполнено по этой рекоменда- ции, то элемент должен выглядеть так:
/>
Средства Java для шифрования XML
Фирма IBM выпустила пакет интерфейсов и классов XSS4J (XML Security
Suite for Java), реализующих спецификацию "XML Encryption", рекоменда- ции RFC 3275, RFC 3076, методы авторизации и получения сертификатов,
методы приведения к каноническому виду. Пакет XSS4J можно свободно скопировать, он доступен по адресу

Глава 8. Безопасность предоставления услуг 353
Для применения классов и интерфейсов пакета XSS4J достаточно добавить полученный при копировании архив xss4j.jar в библиотеку классов J2SE
SDK, например, в каталог или добавить путь к архиву в переменную
Пакет XSS4J требует для своей работы на- личия стандартного Java Security API, входящего в состав J2SE SDK. Кроме того, нужен XML-анализатор, например, Apache Xerces2, и XSLT- процессор, например, Apache
Пакет XSS4J входит в состав не раз упоминавшегося в этой книге набора IBM WSTK и в состав интегрирован- ной среды разработки IBM WebSphere Studio.
Сообщество Apache Software Foundation выпустило пакет "Apache XML
Security", доступный адресу
В него входят средства шифрования, реализующие спецификацию "XML Encryption", и средства создания цифровой подписи по рекомендациям RFC 3275 и
RFC 3076. Пакет можно использовать отдельно или в составе других инст- рументальных средств XML. Он входит, например, в набор средств создания
Web-служб Apache Axis, рассмотренный нами в главе 3.
В листинге 8.3 показан пример клиента Web-службы, создающего SOAP- послание, подписывающего его цифровой подписью, отправляющего под- писанное послание Web-службе, и ожидающего от нее ответа.
Перед тем как запустить клиентскую программу следует сгенерировать клю- чи и сертификат и записать их в стандартное хранилище ключей Java —
файл
Это можно сделать утилитой из набора J2SE SDK,
набрав следующую командную строку:
keytool -genkey и ответив на вопросы утилиты.
: Листинг 8.3. Клиент Web-службы, отправляющий подписанное SOAP-послание
import import import import import import import import import org.w3c.dom.*;
import import j

354 Разработка Web-служб средствами Java
import import public class ClientAxis{
static SOAPEnvelope env = new public static void args){
if
!= 3){
ClientAxis" +
"
" +
" ");
try{
Options opts = new
Service service = new Service ();
Call call =
new j
)
sbe = new
"http://localhost:8080/EchoService",
""));
args[l],
" ) ;
=

Глава 8. Безопасность предоставления услуг 355
" ) ;
e) {
e.printStackTrace ();
private static void
String
String try{
"SOAP-SEC"));
"actor",
"1");
SOAPHeaderElement header = new
"http://schemas.xmlsoap.org/soap/security/2000-12",
"Signature", ""));
Document doc = soap2dom(env);
KeyStore ks =
fis new
;
ks.load(fis,
PrivateKey privateKey =

Разработка Web-служб средствами Java
Element soapHeaderElement =
Element
=
sig = new
X509Certificate cert =
Canonicalizer cl4n canonicalMessage =
InputSource is new new dser = null;
AxisClient new

Глава 8. Безопасность предоставления услуг 357
=
new
= new msgContext,
e) {
;
throw new private static Document soap2dom(S0APEnvelope env)
throws writer = new ctx =
new
Reader reader = new
Document doc =
if (doc == null) throw new return doc;
Существует еще много коммерческих и свободно распространяемых средств шифрования документов XML. Каждый месяц появляются новые средства,
их списки можно просмотреть на сайтах Интернета, посвященных XML.
Безопасность SOAP-посланий
Поскольку SOAP-послание представляет собой документ XML, к нему при- менимы все средства обеспечения безопасности, перечисленные в преды-

358 Разработка Web-служб средствами Java
дущих разделах этой главы. Ничто не мешает зашифровать все послание целиком или его отдельные части, например, тело послания, или отдельные элементы XML, входящие в послание. SOAP-послание можно снабдить цифровой подписью как обычный документ XML.
Тем не менее, SOAP-послания следует составлять так, чтобы их могла про- читать и обработать любая Web-служба, имеющая право на это. Поэтому необходимы правила шифрования и подписи SOAP-посланий, единые для всех Web-служб. Такие правила разрабатываются как расширения протокола
SOAP.
Первое расширение протокола SOAP, посвященное вопросам безопасно- сти, было сделано фирмой IBM еще в 2000 году. Документ под названием "SOAP Security Extensions" опубликован в Интернете по адресу
Он посвящен шифро- ванию, цифровой подписи и авторизации и вводит три соответствующих элемента XML , И В простран- стве имен с идентификатором
Эти элементы записываются как блоки заголовка
1   ...   13   14   15   16   17   18   19   20   21


написать администратору сайта