WS-Security
WS-Security (Web Services Security, röviden WSS) egy nagyon rugalmas és funkciókban gazdag kiegészítése a SOAP-nak, amellyel a webszolgáltatások biztonságát határozhatjuk meg. Az ún. WS-* (webszolgáltatások) családjába tartozik, melyet az OASIS fogadott el szabványként.
Ez a protokoll az üzenetek integritását és titkosítását határozza meg. Sokféle biztonsági tokent támogat, mint például a SAML, Kerberos, és X.509. A fő hangsúly ennél a protokollnál az XML Signature és az XML-kódolás használatán van.
Funkciók
A WS-Security három fő mechanizmust ír le:
- Hogyan jelöljük a SOAP üzeneteket, hogy biztosítsuk az integritást. Az üzenetek jelölése "letagadhatatlan" legyen.
- Hogyan titkosítsuk megfelelően a SOAP üzeneteket.
- Hogyan csatoljunk az üzenetekhez olyan biztonsági tokeneket, amellyel meggyőződhetünk a küldő személyéről.
A specifikáció lehetőséget ad különböző aláírás formátumok, titkosítási algoritmusok és több bizalmi tartományok használatára, és különböző biztonsági token modellt támogat, mint például:
- X.509 tanúsítványok
- Kerberos tikettek
- Felhasználóazonosító / jelszó megbízólevél
- SAML-Assertion
- Felhasználó által definiált token
A tokenek formátumát és szemantikáját a profilhoz tartozó dokumentumban definiálják.
A WS-Security szolgáltatást a SOAP üzenetek fejlécében határozzák meg az alkalmazásrétegben. Példa WS-Security fejlécre:
<?xml version='1.0' encoding='UTF-8'?><br /> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"><br /> <soapenv:Header> <wsse:Security xmlns:wsse="..." soapenv:mustUnderstand="1"> <xenc:EncryptedKey Id="EncKeyId-229902"> <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" /> <ds:KeyInfo xmlns:ds="..."> <wsse:SecurityTokenReference>…</wsse:SecurityTokenReference> </ds:KeyInfo> <xenc:CipherData> <xenc:CipherValue>PpAOXj5P0W8ukm...</xenc:CipherValue> </xenc:CipherData> <xenc:ReferenceList> <xenc:DataReference URI="#EncDataId-30957433" /> </xenc:ReferenceList> </xenc:EncryptedKey> <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"Id="Signature-17764792"> <ds:SignedInfo> <ds:CanonicalizationMethod Algorithm=…/> <ds:SignatureMethod Algorithm=… /> <ds:Transforms>…/ds:Transforms> <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> <ds:DigestValue>+ECkM6R4GQ7AQ=...</ds:DigestValue> </ds:SignedInfo> </ds:Signature> <wsu:Timestamp../> <soapenv:Body xmlns:wsu="..." wsu:Id="id-30957433"> <xenc:EncryptedData Id="EncDataId-30957433”….> </soapenv:Body>
A fentebb említett mechanizmusok nem adnak teljes körű megoldást a web-szolgáltatások biztonságára. Inkább csak alap építőeleme a biztonságnak, amelyre sok egyéb magasabb szintű biztonsági protokoll építhető. Általában a WS-Security önmagában még nem elegendő a megfelelő biztonság biztosításához.
A kulcsmenedzselés, a bizalom kezelése, a technikai részletek meghatározása (pl.: titkosítás algoritmusa) túlmutat a WS-Security hatáskörén.
Használati esetek
Átviteli réteg biztonsága (WS-Security nélkül)
A tipikus SOAP kommunikáció használata esetén két megbízható fél között (HTTPs protokollt használva) egyáltalán nincs is szükség WS-Security használatára.
Vég-vég biztonság
HA egy SOAP közvetítőre van szükség és a közvetítő egyáltalán nem vagy csak kevésbé megbízható, akkor szükséges az üzenetek megjelölése/címkézése és esetleg titkosítása.
Letagadhatatlanság
Az általános módszer egy üzenete letagadhatatlanságának biztosítására, az ha tranzakciókat írunk, amely segítségével visszakövethető az üzenet. Ha ez nem lenne elegendő, akkor a digitális aláírás használata is lehet egy másik módszer.
Alternatív adatátviteli kötések
Habár majdnem minden SOAP szolgáltatás a HTTP protokoll implementációja, elméletben lehetséges más protokollokon alapuló szolgáltatás is, mint pl.: JMS vagy SMTP-n alapuló. Ezekben az esetekben szükséges a vég-vég biztonság meghatározása.
Fordított proxy/Általános biztonsági token
Még ha a web-szolgáltatás az adatátviteli rétegen megvalósított biztonságra támaszkodik is, lehetséges hogy szükséges a túloldali felhasználóval tudatni, hogy milyen szolgáltatást is használunk. A WSS-fejléc tartalmazhat tokeneket a másik oldali felhasználó számára.
Problémák
- Ha az ügyfél és a szolgáltató között gyakori az üzenetváltás, akkor az XML Signature és XML Encryption jelentősen túl lehet terhelve. Ha vég-vég biztonság szükséges, akkor egy olyan protokoll, mint például a WS-SecureConversation csökkentheti a túlterheltséget. Ha elegendő, akkor használjuk az aláírás és a titkosítás közül csak az egyiket, mert az együttes használatuk jelentősen lassíthatja a kommunikációt.
- Sok XML séma használata, mint például a SOAP, SAML, XML ENC, XML SIG függőségi problémákat okozhatnak. Ha például különböző verziójú függvénykönyvtárakat használnak.
Teljesítmény
A WS-Security jelentősen túlterhelhet egy SOAP eljárást, mivel nagyon megnöveli az üzenetek számát. Az XML és a titkosítási eljárások gyorsabb CPU-t, több memóriát és nagyobb sávszélességet követelnek.
Egy 2005-ben készített mérés[1] alapján, melyben 25 különböző nagyságú és komplexitású SOAP üzenet feldolgozását vizsgálták WS-Security és WS-SecureConversition által egy Pentium 4/2,8 GHz processzorral szerelt gépen, a következő megállapításokat lehet tenni:
- A titkosítás gyorsabb, mint az aláírás
- A titkosítás és aláírás együttes használata 2-7 szer lassabb, mint az aláírás önmagában és jelentősen nagyobb dokumentumokat eredményez.
- Az üzenet típusától függően a WS-SecureConversation vagy ugyanolyan eredményt adott, vagy legjobb esetben a felére csökkentette az időtartamot.
- Kevesebb, mint 10 milliszekundumig tart egy 100 kbyte-os tömb aláírása vagy titkosítása, de körülbelül 100~200 kell ahhoz, hogy végrehajtsa a biztonsági műveleteket a SOAP számára.
Egy másik 2006-os[2] mérésen a következő eredmények születtek:
Biztonsági mechanizmus | Üzenet/másodperc |
---|---|
WS-Security (X.509) XML Signature & Encryption | 352 |
WS-SecureConversation XML Signature & Encryption | 798 |
Transport Layer Security | 2918 |
Történet
Eredetileg az IBM, a Microsoft, és a VeriSign fejlesztette ki a protokollt, most viszont már az OASIS közösség által fejlesztett nyílt szabvány lett belőle. 2002-ben az OASIS technikai bizottsága elfogadta a WS-Security szabványt. Ennek következtében a következő verziók kerültek kiadásra:
- WS-Security 1.0, 2004. április 19-én
- Az 1.1-es verziót 2006. február 17-én adták ki
Kapcsolódó szabványok
- WS-Federation
- WS-Privacy
- WS-Test
- WS-Policy
- WS-Trust
- WS-SecureConversation
Kapcsolódó szócikkek
- .NET Web Services Enhancements
- List of Web service specifications (WS-*)
- SAML
- WS-I Basic Security Profile
- Webszolgáltatás
- X.509
- XACML
- XML Encryption
- XML firewall
További információk
- OASIS Web Services Security TC (Contains links to download specification documents)
- WS-Security Specification (IBM)
- WS-I Basic Security Profile
- Web Services Security Documentation
- Web Service Security Patterns (Microsoft)
- WSS4J (WS-Security Java Implementation from Apache)
- Apache Rampart (WS-Security Java Implementation from Apache Axis2)
- WSIT Web Services Interoperability Technologies (WSIT) that enable interoperability between the Java platform and Windows Communication Foundation (WCF)
- python ws-security example
Jegyzetek
Informatikai portál • összefoglaló, színes tartalomajánló lap