programmera.net -> webservice -> normal     för utskrift      info@programmera.net

WSS 1.0, Säkerhet för webbtjänster

1. WSS
2. Namnutrymmen för WSS
3. Terminologi för WSS
4. Grundläggande syntax
5. wsse:BinarySecurityToken
6. ds:Signature
7. Encryption

1. WSS

WSS (Web Service Security) är ett protokoll för att tillhandahålla säkerhet för webbtjänster som sänds över SOAP. Med säkerhet menar vi i detta fall:

  • Privat: Meddelandet är skyddat mot tjuvlyssnare. Ingen utom mottagaren kan läsa och förstå meddelandet.
  • Integritet: Meddelandet är skyddat mot modifikation. Ett modifierat meddelande kommer automatiskt avvisas av mottagaren.
Vi har idag följande versioner av WSS: Som synes är WSS en relativt ung teknologi och därför kan man kanske inte räkna med att implementationerna är helt 100% i dagsläget. På denna sida ska vi diskutera WSS 1.0.

2. Namnutrymmen för WSS

De prefix som används i exemplen nedan syftar på följande namnutrymmen

  • ds= http://www.w3.org/2000/09/xmldsig#
  • S11= http://schemas.xmlsoap.org/soap/envelope/ (Refererar till SOAP 1.1).
  • S12= http://www.w3.org/2003/05/soap-envelope (Refererar till SOAP 1.2).
  • wsse= http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-secext-1.0.xsd (Namnutrymmet för WSS Security Extension).
  • wsu= http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd (Namnutrymmet för WSS Security Utility)
  • xenc= http://www.w3.org/2001/04/xmlenc#

3. Terminologi för WSS

Nedan listas några viktiga termer som gäller för WSS-specifikationen:

  • (Digital) Signatur ("Signature"): Med detta menas ett värde beräknat med en kryptografisk algoritm mot en mängd data på ett sådant sätt att mottagaren kan genom att kontrollera signaturen kan verifiera att meddelandet inte har förvanskats och härstammar från avsändaren. En signatur erbjuder alltså integritet och äkthetsbevis ("authentication"), men gör inte meddelandet privat.
  • Anspråk ("Claim"): Med detta menas en deklaration om skickas från en entitet (privatperson eller orgainsation) till webbtjänsten.
  • Säkerhetssymbol ("Security Token"): Med detta menas en samling av anspråk ("Claims").
  • Signerad Säkerhetssymbol ("Sign Securit Token"): Med detta menas en säkerhetsymbol som har blivit signerad av en kryptografisk auktoritet (t.ex. ett X.509-certifikat eller en Kerberosbiljett).

4. Grundläggande syntax



<?xml version="1.0" encoding="utf-8"?>
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu="..." xmlns:ds="...">
  <S11:Header>
    <wsse:Security>
      <wsse:BinarySecurityToken >
      </wsse:BinarySecurityToken>
      <ds:Signature > 
      </ds:Signature>
      <xenc:EncryptedKey >
      </xenc:EncryptedKey>
      <wsse:UsernameToken >
      </wsse:UsernameToken>
    </wsse:Security>
  </S11:Header>
  <S11:Body >
    ...
  </S11:Body>
</S11:Envelope>

  • wsse:BinarySecurityToken: Detta element kan innehålla binära data, som t.ex. X.509 certifikat och Kerberosbiljetter.
  • ds:Signature: Detta element innehåller den digitala signaturen. Här används mest element med prefixet "ds", utom i "KeyInfo"-elementet.
  • xenc:EncryptedKey: Detta element innehåller en krypterad nyckel som används för att låsa upp krypterad data i bodyn.
  • wsse:UsernamToken: Detta element innehåller ett användarnamn.

5. wsse:BinarySecurityToken

wsse:BinarySecurityToken är det rekommenderade sättat att överföra nycklar om de är krypterade.

  • ds:Signature/KeyInfo: För icke krypterade nycklar kan ds:Signature/KeyInfo användas.
Nedan visas ett exempel på hur wsse:BinarySecurityToken kan se ut:

<?xml version="1.0" encoding="utf-8"?>
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu="..." xmlns:ds="...">
  <S11:Header>
    <wsse:Security>
      <wsse:BinarySecurityToken 
                wsu:Id="bst_id" 
                EncodingType="wsse:Base64Binary" 
                ValueType="xsse:X509v3" >
            M32ITQCTwwTRi45f...
      </wsse:BinarySecurityToken>
      <ds:Signature> 
      </ds:Signature>
   </wsse:Security>
  </S11:Header>
  <S11:Body >
    ...
  </S11:Body>
</S11:Envelope>
I detta exempel ser vi följande:
  • Id är "bst_id".
  • EncodingType är "wsse:Base64Binary", vilket är den enda fördefinierade type (betyder "XML Schema base 64 encoding").
  • ValueType är "xsse:X509v3", vilket indikerar att detta är ett X.509-certifikat.

6. ds:Signature

Nedan följer ett exempel på en SOAP Header med ds:Signature (taget från WSS 1.0 specifikationen):

<?xml version="1.0" encoding="utf-8"?>
<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu="..." xmlns:ds="...">
  <S11:Header>
    <wsse:Security xmlns:wsse="...">
      <xxx:CustomToken wsu:Id="MyID" xmlns:xxx="http://fabrikam123/token">
       FHUIORv...
      </xxx:CustomToken>
      <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#hmac-sha1"/>
          <ds:Reference URI="#MsgBody">
            <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
            <ds:DigestValue>LyLsF0Pi4wPU...</ds:DigestValue>
          </ds:Reference>
        </ds:SignedInfo>
        <ds:SignatureValue>DJbchm5gK...</ds:SignatureValue>
        <ds:KeyInfo>
          <wsse:SecurityTokenReference>
            <wsse:Reference URI="#MyID"/>
          </wsse:SecurityTokenReference>
        </ds:KeyInfo>
      </ds:Signature>
    </wsse:Security>
  </S11:Header>
  <S11:Body wsu:Id="MsgBody">
    <tru:StockSymbol xmlns:tru="http://fabrikam123.com/payloads"> QQQ </tru:StockSymbol>
  </S11:Body>
</S11:Envelope>

7. Encryption

WSS utnyttjar XML Encryption för kryptering.

  • XML Encryption är en specifikation utfärdad av W3C.
XML Encryption stödjer att man kan kryptera delar av en XML-fil. Detta stöd finns även i WSS, och man använder taggen xenc:EncryptedData för att åstakomma detta. För att hitta till den Nedan följer ett exempel på hur man kan kryptera ett SOAP-meddelande (taget från WSS 1.0 specifikationen):