5.2.4. Шифрование и расшифрование сообщений
Шифрование и расшифрование сообщений осуществляются в соответствии со спецификацией WS Encryption 1.1. Шифрование сообщений выполняется после их подписания.
Шифрование сообщения осуществляется следующим образом.
1. В заголовок транспортного конверта сообщения добавляется элемент wsse:Security. Данный элемент должен предшествовать элементу wsse:Security, содержащему электронную подпись, если таковой имеется.
2. Сертификат открытого ключа, с помощью которого шифруется сообщение, включается в элемент wsse:Security/wsse:BinarySecurityToken. Сертификат соответствует стандарту X.509 (указывается в атрибуте ValueType) и кодируется с использованием стандарта кодирования Base64 (указывается в атрибуте EncodingType).
3. В элементе wsse:Security/xenc:EncryptedKey/ds:KeyInfo указывается ссылка на сертификат открытого ключа.
4. Бизнес-сообщение, содержащееся в элементе soap:Body шифруется в соответствии со спецификацией XML Encryption 1.1. Зашифрованное сообщение помещается в элемент xenc:EncryptedData, который заменяет исходное бизнес-сообщение.
5. В элементе wsse:Security/xenc:EncryptedKey/xenc:ReferenceList указывается ссылка на зашифрованное сообщение.
Расшифрование сообщения осуществляется следующим образом.
1. Если в заголовке транспортного конверта сообщения содержится элемент wsse:Security/xenc:EncryptedKey, то сообщение является зашифрованным и требуется его расшифрование.
2. Для сертификата открытого ключа, ссылка на который указана в элементе wsse:Security/xenc:EncryptedKey/ds:KeyInfo, определяется закрытый ключ для расшифрования сообщения.
3. Данные, ссылка на которые указана в элементе wsse:Security/xenc:EncryptedKey/xenc:ReferenceList, дешифруются с помощью закрытого ключа. Результат помещается в сообщение вместо зашифрованных данных.
4. Из сообщения удаляется элемент wsse:Security, содержащий сведения о шифровании сообщения.
5. В случае невозможности расшифровать сообщение формируется сообщение об ошибке в соответствии с требованиями раздела 5.2.5 Стандарта.
Структура элемента wsse:Security, содержащего сведения о шифровании сообщения, описана в Таблицах 5.5 - 5.6.
ТАБЛИЦА 5.5. СТРУКТУРА ЭЛЕМЕНТА WSSE:SECURITY, СОДЕРЖАЩЕГО СВЕДЕНИЯ О ШИФРОВАНИИ СООБЩЕНИЯ
N
|
Элемент
|
Описание
|
Область значений
|
Мн.
|
а)
|
Признак обязательности интерпретации (@soap:mustUnderstand)
|
признак того, что получатель сообщения должен обработать элемент согласно спецификации. Атрибут имеет фиксированное значение "true"
|
логическое значение
|
1
|
1
|
Сертификат открытого ключа (wsse: BinarySecurityToken)
|
сертификат открытого ключа, используемого для шифрования сообщения
|
строка символов, закодированная с помощью Base64
|
1
|
а)
|
Идентификатор (@wsu:Id)
|
уникальный идентификатор элемента в сообщении
|
идентификатор элемента документа
|
1
|
б)
|
Вид (@ValueType)
|
стандарт сертификата открытого ключа. Атрибут имеет фиксированное значение, аналогичное описанному в Приложении 1
|
унифицированный идентификатор ресурса
|
1
|
в)
|
Кодировка (@EncodingType)
|
схема кодирования сертификата открытого ключа. Атрибут имеет фиксированное значение, аналогичное описанному в Приложении 1
|
унифицированный идентификатор ресурса
|
1
|
2
|
Сведения о зашифрованных данных (xenc:EncryptedKey)
|
сведения о зашифрованных данных
|
структура сведений описана в Таблице 5.6
|
1
|
ТАБЛИЦА 5.6. СТРУКТУРА СВЕДЕНИЙ О ЗАШИФРОВАННЫХ ДАННЫХ (XENC:ENCRYPTEDKEY)
N
|
Элемент
|
Описание
|
Область значений
|
Мн.
|
1
|
Метод шифрования (xenc:EncryptionMethod)
|
сведения о методе шифрования
|
определяется областями значений вложенных элементов
|
1
|
а)
|
Алгоритм (@Algorithm)
|
идентификатор алгоритма шифрования
|
унифицированный идентификатор ресурса
|
1
|
2
|
Сведения о ключе (ds:KeyInfo)
|
сведения об открытом ключе, используемом для шифрования
|
определяется областями значений вложенных элементов
|
1
|
2.1
|
Ссылка на токен (wsse:SecurityToken Reference)
|
сведения о местонахождении ключа
|
определяется областями значений вложенных элементов
|
1
|
2.1.1
|
Ссылка (wsse:Reference)
|
элемент, содержащий идентификатор местонахождения ключа
|
отсутствует
|
1
|
а)
|
Идентификатор (@URI)
|
идентификатор местонахождения ключа. Атрибут имеет фиксированное значение в соответствии с описанием Приложения 1
|
идентификатор элемента документа
|
1
|
б)
|
Вид (@ValueType)
|
стандарт сертификата ключа. Атрибут имеет фиксированное значение в соответствии с описанием Приложения 1
|
унифицированный идентификатор ресурса
|
1
|
3
|
Список ссылок (xenc:ReferenceList)
|
список ссылок на зашифрованные данные
|
определяется областями значений вложенных элементов
|
1
|
3.1
|
Ссылка на данные (xenc:DataReference)
|
ссылка на зашифрованные данные
|
отсутствует
|
1
|
а)
|
Идентификатор (@URI)
|
идентификатор зашифрованных данных
|
идентификатор элемента документа
|
1
|
Структура зашифрованных данных представлена в Таблице 5.7.
ТАБЛИЦА 5.7. СТРУКТУРА ЗАШИФРОВАННЫХ ДАННЫХ (XENC:ENCRYPTEDDATA)
N
|
Элемент
|
Описание
|
Область значений
|
Мн.
|
а)
|
Идентификатор (@Id)
|
идентификатор зашифрованных данных
|
идентификатор элемента документа
|
1
|
1
|
Метод шифрования (xenc:EncryptionMethod)
|
сведения о методе шифрования
|
отсутствует
|
1
|
а)
|
Алгоритм (@Algorithm)
|
идентификатор алгоритма шифрования
|
унифицированный идентификатор ресурса
|
1
|
2
|
Зашифрованные данные (xenc:CipherData)
|
элемент, содержащий зашифрованные данные
|
определяется областями значений вложенных элементов
|
1
|
2.1
|
Зашифрованное значение (xenc:CipherValue)
|
зашифрованные данные
|
строка символов, закодированная с помощью Base64
|
1
|