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:
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
3. Terminologi för WSS
Nedan listas några viktiga termer som gäller för WSS-specifikationen:
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>
5. wsse:BinarySecurityToken
wsse:BinarySecurityToken är det rekommenderade sättat att överföra nycklar om de är krypterade.
Nedan visas ett exempel på hur wsse:BinarySecurityToken kan se ut:
I detta exempel ser vi följande:
<?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>
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 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):