Безопасность и Internet - статьи

       

Parameters passed with the method


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”>

    <SOAP-ENV:Body>

        <s:GetSpecialDiscountedBookingForPartners
            xmlns:s=“http://www.MyHotel.com/partnerservice/”>

                 <!-- Parameters passed with the method call-->

         </s:GetSpecialDiscountedBookingForPartners>

    </SOAP-ENV:Body>

</SOAP-ENV:Envelope>


SOAP в данном случае используется как пример XML-формата, чтобы продемонстрировать "Цифровую подпись XML", которая не является специфичной для SOAP. Поэтому ее можно применять, чтобы вставлять подписи и профили сообщения в любой экземпляр XML: SOAP или какой-либо иной.
В следующем примере теги цифровой подписи XML будут вставлены в заголовок SOAP. Цифровая подпись - это гибкая технология, она допускает включение таких тегов в любое место XML-файла. На самом деле существуют три типа подписей XML: заключающая в конверт (enveloping), заключаемая в конверт (enveloped) и обособленная (detached). Если подпись XML оборачивает данные, подлежащие подписанию, говорят, что это заключающая в конверт подпись. Если же данные, подлежащие подписанию, оборачивают эту подпись (например, подпись XML становится элементом данных XML, которые подписываются), то эта подпись называется заключаемой в конверт. Наконец, если подпись и данные, подлежащие подписанию, хранятся раздельно - подписываемый элемент и элемент подписи являются элементами одного уровня - такую подпись принято считать обособленной. В примере, который в этой статье иллюстрирует применение спецификации "Цифровая подпись XML", используются обособленные подписи.




<?xml version=”1.0”?>

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
    xmlns:ds=”http://www.w3.org/2000/09/xmldsig#”>

    <SOAP-ENV:Header>

        <ds:Signature>

             <ds:SignedInfo>

             </ds:SignedInfo>

             <ds:SignatureValue>

             </ds:SignatureValue>

             <ds:KeyInfo>

             </ds:KeyInfo>

        </ds:Signature>

    </SOAP-ENV:Header>

    <SOAP-ENV:Body>

        <s:GetSpecialDiscountedBookingForPartners
            xmlns:s=“http://www.MyHotel.com/partnerservice/”>

                 <!-- Parameters passed with the method call-->

         </s:GetSpecialDiscountedBookingForPartners>

    </SOAP-ENV:Body>

</SOAP-ENV:Envelope>


Элемент Signature в Листинге 2 содержит три дочерних элемента: SignedInfo, SignatureValue и KeyInfo.
Этот элемент является единственным обертывающим элементом для других тегов цифровой подписи XML. В последующих шагах: 2, 3 и 4 - мы создадим дочерние узлы для этих трех потомков Signature (SignedInfo, SignatureValue и KeyInfo).
Второй шаг - создание дочерних узлов элемента SignedInfo. Листинг 3 - результат включения дочерних узлов SignedInfo в Листинг 2. Законченная структура элемента SignedInfo - подробная иллюстрация того, как создается подпись XML - элемент SignedInfo имеет несколько потомков, каждый из которых содержит несколько бит информации, назначение которой будет раскрыто ниже.


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
    xmlns:ds=”http://www.w3.org/2000/09/xmldsig#”>

    <SOAP-ENV:Header>

        <ds:Signature>

             <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="#GetSpecialDiscountedBookingForPartners">

                      <ds:Transforms>

                          <ds:Transform
                              Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

                      </ds:Transforms>

                      <ds:DigestMethod


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
    xmlns:ds=”http://www.w3.org/2000/09/xmldsig#”>

    <SOAP-ENV:Header>

        <ds:Signature>

             <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="#GetSpecialDiscountedBookingForPartners">

                      <ds:Transforms>

                          <ds:Transform
                              Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

                      </ds:Transforms>

                      <ds:DigestMethod


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
    xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”
    xmlns:ds=”http://www.w3.org/2000/09/xmldsig#”>

    <SOAP-ENV:Header>

        <ds:Signature>

             <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="#GetSpecialDiscountedBookingForPartners">

                      <ds:Transforms>

                          <ds:Transform
                              Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>

                      </ds:Transforms>

                      <ds:DigestMethod


<?xmlversion='1.0'?>

<EncryptedData
    xmlns="http://www.w3.org/2001/04/xmlenc#"
    MimeType="text/xml">

    <EncryptionMethod
        Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>

    <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

        <ds:KeyName>
MyKeyIdentifier</ds:KeyName>

    </ds:KeyInfo>

    <CipherData>

      <CipherValue>
B457V645B45........</CipherValue>

    </CipherData>

</EncryptedData>

Корневой элемент EncryptedData несет зашифрованные данные вместе с такой необходимой информацией, как алгоритм, используемый для шифрования. Этот элемент содержит объявление пространства имен шифрования XML (http://www.w3.org/2001/04/xmlenc#) и атрибут MimeType, значение которого равно text/xml. По этому атрибуту получатель этого зашифрованного XML-файла может понять, что XML-файл был зашифрован, чтобы создать структуру EncryptedData.
Первый потомок корневого элемента - элемент EncryptionMethod. Этот элемент содержит атрибут Algorithm, который определяет алгоритм, использованный при шифровании. Его значение равно http://www.w3.org/2001/04/xmlenc#3des-cbc, что определяет алгоритм тройной DES (Data Encryption Standard, Стандарт шифрования данных).
Элемент ds:KeyInfo тот же самый, что и тот, который использовался при применении спецификации "Цифровая подпись XML". Необходимо отметить, что этот элемент был позаимствован из пространства имен цифровой подписи XML.
Элемент EncryptedData содержит еще один дочерний элемент - CipherData, у которого в свою очередь имеется дочерний элемент CipherValue. Этот элемент CipherValue несет зашифрованное содержание (зашифрованную версию XML-документа). Таким образом, результатом шифрования XML-файла является содержание элемента CipherValue.


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”>

    <SOAP-ENV:Body>

        <xenc:EncryptedData
             xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
             Type="http://www.w3.org/2001/04/xmlenc#Element">

             <xenc:EncryptionMethod
                 Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>

             <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

                 <ds:KeyName>
MyKeyIdentifier</ds:KeyName>

             </ds:KeyInfo>

             <xenc:CipherData>

                   <xenc:CipherValue>
B457V645B45........</xenc:CipherValue>

             </xenc:CipherData>

        </xenc:EncryptedData>

    </SOAP-ENV:Body>

</SOAP-ENV:Envelope>

Сравним элемент EncryptedData из Листинга 6 с элементом EncryptedData из Листинга 7. Нетрудно видеть, что имеется одно различие: вместо атрибута MimeType Листинга 6 в Листинге 7 появился атрибут Type. Значение этого атрибута равно http:///www.w3.org/2001/04/xmlenc#Element, что означает, что зашифрован XML-элемент.
Таким образом, при шифровании элемента XML-файла следует использовать идентификатор http:///www.w3.org/2001/04/xmlenc#Element в качестве значения атрибута Type. В этом случае получатель зашифрованного XML-файла будет знать, что зашифрованные данные должны интерпретироваться как XML-элемент в расшифрованной простой текстовой форме.


<?xml version=”1.0”?>

<SOAP-ENV:Envelope
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/”>

    <SOAP-ENV:Body>

        <s:GetSpecialDiscountedBookingForPartners
            xmlns:s=“http://www.MyHotel.com/partnerservice/”
            ID="GetSpecialDiscountedBookingForPartners">

            <xenc:EncryptedData
                 xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
                 Type="http://www.w3.org/2001/04/xmlenc#Content">

                 <xenc:EncryptionMethod
                     Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>

                 <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

                     <ds:KeyName>
MyKeyIdentifier</ds:KeyName>

                 </ds:KeyInfo>

                 <xenc:CipherData>

                       <xenc:CipherValue>
B457V645B45........</xenc:CipherValue>

                </xenc:CipherData>

            </xenc:EncryptedData>

         </s:GetSpecialDiscountedBookingForPartners>

    </SOAP-ENV:Body>

</SOAP-ENV:Envelope>



<?xmlversion="1.0" encoding="utf-8"?>

<SOAP:Envelope
    xmlns:SOAP="http://www.w3.org/2001/12/soap-envelope"
    xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/xx/secext"
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

    <SOAP:Header>

        <wsse:Security>

            <wsse:BinarySecurityToken
                ValueType="wsse:X509v3"
                EncodingType="wsse:Base64Binary"
                wsu:Id="MyTourOperatorCertificate">

                   LKSAJDFLKASJDlkjlkj243kj;lkjLKJ...
            </wsse:BinarySecurityToken>

            <ds:Signature>

                <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"/>

Содержание раздела