SOAP Security Enhancement pre ASP.NET webové služby: Rozdiel medzi revíziami
() |
|||
(27 medziľahlých úprav od 2 ďalších používateľov nie je zobrazených) | |||
Riadok 2: | Riadok 2: | ||
{{Praca_uvod|9|Návrh a implementácia bezpečnostnej technológie pre webové služby|XML a webové služby |XML ASP.NET webové služby|Zabezpečennie webových aplikácií|Integrita a dôvernosť komunikácie|Autentifikácia|Autorizácia webových služieb|Zabezpečenie webových služieb|XML security|SOAP Security Enhancement pre ASP.NET webové služby}} | {{Praca_uvod|9|Návrh a implementácia bezpečnostnej technológie pre webové služby|XML a webové služby |XML ASP.NET webové služby|Zabezpečennie webových aplikácií|Integrita a dôvernosť komunikácie|Autentifikácia|Autorizácia webových služieb|Zabezpečenie webových služieb|XML security|SOAP Security Enhancement pre ASP.NET webové služby}} | ||
__TOC__ | __TOC__ | ||
− | + | =SOAP Security Enhancement pre ASP.NET webové služby= | |
− | |||
− | V predchádzajúcich dvoch kapitolách sme si opísali | + | V predchádzajúcich dvoch kapitolách sme si opísali teoretické možnosti zabezpečenia XML ASP.NET webových služieb a štandardy zamerané na bezpečnosť XML. Táto kapitola sa zaoberá vývojom vlastnej bezpečnostnej platformy pre XML ASP.NET webové služby v jazyku C<nowiki> </nowiki>, ktorú sme nazvali SOAP Security Enhancement (SSE) Naša bezpečnostná platforma bude predstavovať zabezpečenie na úrovni správ a tiež na úrovni aplikácie. Pri vytváraní bezpečnostného systému pre webové aplikácie treba zabezpečiť: |
− | * Mechanizmus pre overovanie klientskych | + | * Mechanizmus pre overovanie klientskych aplikácií. Možnosti overovania klientov sme si podrobne rozobrali v kapitolách 5, 5.1, 5.2, 5.3. |
− | * Mechanizmus pre autorizáciu overených | + | * Mechanizmus pre autorizáciu klientov overených webovou službou. Spôsobmi autorizácie sme sa zaoberali kapitolách 5.1, kde sme sa zaoberali autorizáciou s využitým webového servera IIS a takisto autorizáciou prostredníctvom konfiguračného súboru webovej služby, ktorú sme si opísali v kapitole 6. |
− | * Mechanizmus pre zabezpečenie dôvernosti a integrity komunikácie. Spôsobov na | + | * Mechanizmus pre zabezpečenie dôvernosti a integrity komunikácie. Spôsobov na vytvorenie bezpečnej komunikačnej linky je viacero. Najrozšírenejší spôsob je použitie technológie SSL, ktorou sme sa zaoberali v podkapitole 4.1. Táto technológia má aj svoje nedostatky, ktoré sme načrtli v kapitole 7 a s ktorými sa oboznámime v podkapitole 9.7.1. |
− | V príslušných kapitolách sme | + | V príslušných kapitolách sme vysvetlili výhody, nevýhody a oblasti použitia daných mechanizmov pre autentifikáciu, autorizáciu a zabezpečenie dôvernosti a integrity komunikácie. V tejto kapitole ponúkame vlastný komplexný spôsob, ako zabezpečiť komunikáciu medzi XML ASP.NET webovou službou a klientskou aplikáciou na platforme .NET Framework 3.5. |
− | V Tab. 9.1 sú prehľadne opísané spôsoby a technológie, ktoré použijeme na autentifikáciu, autorizáciu a zabezpečenie dôvernosti a integrity komunikácie. Tie | + | V Tab. 9.1 sú prehľadne opísané spôsoby a technológie, ktoré použijeme na autentifikáciu, autorizáciu a zabezpečenie dôvernosti a integrity komunikácie. Tie podrobnejšie popíšeme a vysvetlíme nasledujúcich podkapitolách. |
− | |||
− | |||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | '''Tab. 9.1''' Popis technológií použitých pri vlastnej bezpečnostnej platforme | ||
|align = "justify"|'''Mechanizmus''' | |align = "justify"|'''Mechanizmus''' | ||
|align = "justify"|'''Technológia''' | |align = "justify"|'''Technológia''' | ||
Riadok 25: | Riadok 22: | ||
|align = "justify"|'''Certifikát X509''' | |align = "justify"|'''Certifikát X509''' | ||
|- | |- | ||
− | |align = "justify"| | + | |align = "justify"|Autorizácia |
− | |align = "justify"| | + | |align = "justify"|Autorizácia bude realizovaná prostredníctvom programovej impersonácie, ktorú sme si vysvetlili v podkapitole 5.2.1. |
|- | |- | ||
|Integrita a dôvernosť komunikácie | |Integrita a dôvernosť komunikácie | ||
− | |align = "justify"|Integrita a dôvernosť komunikácie bude zabezpečená prostredníctvom selektívneho šifrovania SOAP správ s využitím | + | |align = "justify"|Integrita a dôvernosť komunikácie bude zabezpečená prostredníctvom selektívneho šifrovania SOAP správ s využitím Advanced Encryption Standard a prostredníctvom digitálneho podpisovania SOAP správ pomocou certifikátov X509 s využitím štandardu XML Signature. |
|- | |- | ||
|} | |} | ||
− | |||
− | |||
− | |||
+ | ==Štruktúra SOAP Security Enhancement z objektovo-orientovaného prístupu== | ||
− | Tab. 9.2 | + | V Tab. 9.2 sú prehľadne opísané základné programové triedy bezpečnostnej platformy spolu s ich funkcionalitou. Podrobnejšie budú opísané v príslušných podkapitolách. |
{|class="wikitable" | {|class="wikitable" | ||
+ | '''Tab. 9.2''' Triedy bezpečnostnej platformy | ||
|align = "justify"|'''Názov triedy''' | |align = "justify"|'''Názov triedy''' | ||
|align = "justify"|'''Popis''' | |align = "justify"|'''Popis''' | ||
+ | |- | ||
+ | |align = "justify"|AbstractDatabase | ||
+ | |align = "justify"|Trieda vytvorená podľa návrhového vzoru Abstract Factory, ktorá umožňuje flexibilne vytvoriť triedu na prístup k databázovému úložisku podľa konkrétneho DBMS. | ||
|- | |- | ||
|align = "justify"|DbProvider | |align = "justify"|DbProvider | ||
− | |align = "justify"|Trieda | + | |align = "justify"|Trieda pre prístup k MS SQL databázovému úložisku. |
|- | |- | ||
|align = "justify"|SecureExtension | |align = "justify"|SecureExtension | ||
− | |align = "justify"|Trieda SOAP | + | |align = "justify"|Trieda SOAP rozšírenia umožňuje prístup k SOAP správam v rôznych etapách spracovania. |
|- | |- | ||
|align = "justify"|SecureExtensionAttribute | |align = "justify"|SecureExtensionAttribute | ||
− | |align = "justify"|Predstavuje atribút SOAP rozšírenia, pomocou ktorého sa špecifikujú konkrétne časti (elementy) SOAP správy budú šifrované a digitálne podpísané. | + | |align = "justify"|Predstavuje atribút SOAP rozšírenia, pomocou ktorého sa špecifikujú konkrétne časti (elementy) SOAP správy ktoré budú šifrované a digitálne podpísané. |
|- | |- | ||
|align = "justify"|SecureExtensionUtilities | |align = "justify"|SecureExtensionUtilities | ||
Riadok 63: | Riadok 62: | ||
|- | |- | ||
|align = "justify"|UserData | |align = "justify"|UserData | ||
− | |align = "justify"|Predstavuje „data | + | |align = "justify"|Predstavuje „data object“ reprezentujúci údaje pre šifrovanie a digitálne podpisovanie SOAP správ. |
|- | |- | ||
|align = "justify"|UserImpersonation | |align = "justify"|UserImpersonation | ||
− | |align = "justify"| | + | |align = "justify"|TTrieda zabezpečuje mechanizmus autorizácie prostredníctvom Windows impersonácie. |
|- | |- | ||
|} | |} | ||
− | + | ==Autentifikácia klientov v SOAP Security Enhancement== | |
− | Možnosti na overovanie klientov pre XML ASP.NET webové služby | + | Možnosti na overovanie klientov pre XML ASP.NET webové služby sú značne obmedzené. Kedže webová služba neposkytuje žiaden vstavaný spôsob akým, by mohol užívateľ predložiť prihlasovacie údaje, napríklad webový formulár. Najrozšírenejšie spôsoby overovania klientov webovou službou sú tieto <nowiki>[</nowiki>1<nowiki>]</nowiki>: |
− | * Autentifikácie Windows | + | * Autentifikácie Windows. Tento typ nie je veľmi flexibilný a má veľa nedostatkov, ktoré sme si opísali v kapitole 5.1. |
− | * Vlastný typ | + | * Vlastný typ autentifikačného procesu založeného na prihlasovacích lístkoch s využitím SOAP rozšírenia. |
* Použitie klientskych certifikátov X509. | * Použitie klientskych certifikátov X509. | ||
Autentifikáciu založenú na certifikátoch X509 sme zvolili z nasledujúcich dôvodov: | Autentifikáciu založenú na certifikátoch X509 sme zvolili z nasledujúcich dôvodov: | ||
− | 1. Použitie klientskych certifikátov | + | 1. Použitie klientskych certifikátov dáva značnú kontrolu nad užívateľskými identitami, nakoľko certifikáty sú vydávané certifikačnou autoritou, ktorá býva zvyčajne pod kontrolou administrátora servera, na ktorom môže byť hosťovaná webová služba. Tak isto je možné klientske certifikáty mapovať na užívateľské účty Windows, či už priamo na webovom serveri IIS alebo priamo programovo vo webovej službe. |
− | 2. Certifikáty X509 predstavujú účinnú ochranu proti | + | 2. Certifikáty X509 predstavujú účinnú ochranu proti podvrhnutiu falošného verejného kľúča ( Man-in-the-Middle Attack <nowiki>[</nowiki>36<nowiki>]</nowiki> ). |
− | 3. Tak isto predstavuje účinný mechanizmus na zabezpečenie, že vlastník verejného kľúča má k nemu zodpovedajúci súkromný kľúč. | + | 3. Tak isto predstavuje účinný mechanizmus na zabezpečenie toho, že vlastník verejného kľúča má k nemu zodpovedajúci súkromný kľúč. |
Certifikátom sme sa podrobnejšie venovali v podkapitole 4.1.1. Na vystavenie klientskych certifikátov sme vytvorili vlastnú testovaciu certifikačnú autoritu na operačnom systéme Windows Server 2003. | Certifikátom sme sa podrobnejšie venovali v podkapitole 4.1.1. Na vystavenie klientskych certifikátov sme vytvorili vlastnú testovaciu certifikačnú autoritu na operačnom systéme Windows Server 2003. | ||
Riadok 90: | Riadok 89: | ||
Počiatočnú autentifikáciu sme sa rozhodli teda realizovať prostredníctvom klientskych certifikátov X509. Na korektný prenos certifikátov X509 je nutný HTTPS prenos. | Počiatočnú autentifikáciu sme sa rozhodli teda realizovať prostredníctvom klientskych certifikátov X509. Na korektný prenos certifikátov X509 je nutný HTTPS prenos. | ||
− | + | Kedže použitie technológie SSL má aj nedostatky a pri prenose veľkého množstva dát je náročné, rozhodli sme sa, že HTTPS kanál bude použitý pri komunikácii klienta a webovej služby iba raz, a to pri počiatočnom volaní webovej metódy, ktorá zabezpečí overenie klienta na základe klientskeho certifikátu X509. Následne bude klientovi vydaný „autentifikačný lístok", ktorý bude umiestnený do SOAP hlavičky. Lístok obsahuje 128 bitové jedinečné číslo, ktoré identifikuje užívateľa pri nasledujúcich volaniach webových metód, a je použitý na jeho overenie. Lístok sa vydáva klientovi s určitou časovou platnosťou, ktorú je možné podľa potreby a priority meniť. | |
+ | |||
+ | Hodnota ID v autentifikačnom lístku je uložená spolu s príslušnými údajmi z klientskeho certifikátu do relačnej databázy, ktorú webová služba používa na ďalšie overovanie klienta pri volaní webových metód. | ||
− | + | Proces prvotnej autentifikácie je nasledovný. Pri počiatočnom prístupe klienta k webovej službe musí klient zavolať webovú metódu '''CreateConnection''' webovej služby. Metóda | |
− | + | CreateConnection plní v komunikačnom scenári nasledujúce funkcie: | |
* Overenie klientskeho certifikátu. | * Overenie klientskeho certifikátu. | ||
* Vytvorenie SOAP hlavičky s užívateľským ID. | * Vytvorenie SOAP hlavičky s užívateľským ID. | ||
− | * Zápis príslušných parametrov z klientskeho certifikátu do | + | * Zápis príslušných parametrov z klientskeho certifikátu do databázy. |
* Vygenerovanie a zaslanie parametrov AES, ktoré sú použité na šifrovanie SOAP správ. | * Vygenerovanie a zaslanie parametrov AES, ktoré sú použité na šifrovanie SOAP správ. | ||
− | Prostredníctvom vlastnosti''' Context''', ktorú trieda webovej služby získala odvodením z abstraktnej triedy WebService (pozri podkapitola 2.1) je extrahovaný klientsky certifikát. | + | Prostredníctvom vlastnosti''' Context''', ktorú trieda webovej služby získala odvodením z abstraktnej triedy WebService (pozri podkapitola 2.1), je extrahovaný klientsky certifikát. |
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.3''' Extrahovanie klientského certifikátu z vlastnosti Context | |
|- | |- | ||
− | | | + | |<source lang="csharp"> |
− | + | X509Certificate2 cert = new X509Certificate2(Context.Request.ClientCertificate.Certificate); | |
− | Následne | + | </source> |
+ | |} | ||
+ | Následne je klientsky certifikát overený na revokáciu a dôveryhodnosť certifikačnej autority. | ||
− | Pokiaľ je certifikát klienta úspešne | + | Pokiaľ je certifikát klienta úspešne overený, webová metóda CreateConnection vygeneruje hodnotu ID v autentifikačnom lístku. |
− | Po | + | Po vygenerovaní ID pre overeného klienta sú údaje z klientskeho certifikátu (verejný kľúč a common name), ID klienta spolu s dátumom a časom vytvorenia lístka zapísané do databázy. Následne je vytvorená SOAP hlavička , do ktorej je umiestnené ID užívateľa. |
Výhoda vlastného autentifikačného systému na lístkoch: | Výhoda vlastného autentifikačného systému na lístkoch: | ||
− | * Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky pri ďalšom odosielaní SOAP správ na webovú službu | + | * Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky pri ďalšom odosielaní SOAP správ na webovú službu posielaný aj autentifikačný lístok v SOAP hlavičke. |
− | * Pri opätovnom volaní webových metód | + | * Pri opätovnom volaní webových metód nemusí byť posielaný s požiadavkou aplikácie aj klientsky certifikát. Vďaka tomu nemusí byť opätovne použité aj HTTPS spojenie. |
− | * Autentifikačný lístok | + | * Autentifikačný lístok môže byť aplikácii vydaný s určitou časovou platnosťou, čo zvyšuje flexibilitu systému. |
− | |||
Parametre AES šifry sú zaslané webovou metódou''' CreateConnection''' vo forme XML dokumentu. XML dokument je zašifrovaný pomocou RSA šifry s využitím verejného kľúča z klientskeho certifikátu. | Parametre AES šifry sú zaslané webovou metódou''' CreateConnection''' vo forme XML dokumentu. XML dokument je zašifrovaný pomocou RSA šifry s využitím verejného kľúča z klientskeho certifikátu. | ||
− | XML dokument obsahuje parametre AES šifry a | + | XML dokument obsahuje parametre AES šifry a takisto verejný kľúč z certifikátu servera, na overenie digitálneho podpisu SOAP správy webovej služby. |
Zašifrované XML je na strane klienta dešifrované pomocou súkromného kľúča z patričného klientskeho certifikátu. | Zašifrované XML je na strane klienta dešifrované pomocou súkromného kľúča z patričného klientskeho certifikátu. | ||
Riadok 129: | Riadok 130: | ||
Parametre AES šifry využíva objekt proxy na šifrovanie SOAP požiadaviek klienta. | Parametre AES šifry využíva objekt proxy na šifrovanie SOAP požiadaviek klienta. | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.4''' Autentifikačný lístok v SOAP hlavičke | |
|- | |- | ||
+ | |<source lang="xml"> | ||
+ | <source lang="xml"> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> | ||
+ | <soap:Header> | ||
+ | <TicketHeader xmlns="http://tempuri.org/"> | ||
+ | <Ticket>f84bd797-8ea5-463c-9319-5d952ec30207</Ticket> | ||
+ | </TicketHeader> | ||
+ | </soap:Header> | ||
+ | <soap:Body> | ||
+ | </soap:Body> | ||
+ | </soap:Envelope> | ||
+ | </source> | ||
|} | |} | ||
− | [[ | + | [[Súbor:dp_2010_jm_13.png|framed|center|Obr. 9.1 Autentifikačný proces]] |
− | |||
Popis autentifikačného procesu na Obr. 9.1 : | Popis autentifikačného procesu na Obr. 9.1 : | ||
Riadok 146: | Riadok 157: | ||
2. Pridanie certifikátu k objektu proxy a zavolanie webovej metódy CreateConnection. | 2. Pridanie certifikátu k objektu proxy a zavolanie webovej metódy CreateConnection. | ||
− | 3. Autentifikácia klientskeho certifikátu, vydanie autentifikačného | + | 3. Autentifikácia klientskeho certifikátu, vydanie autentifikačného lístka, ak bol certifikát prijatý. |
4. Pri následnom volaní webovej metódy sa autentifikácia klienta vykoná na základe autentifikačného lístka a komunikácia prebieha cez HTTP kanál. | 4. Pri následnom volaní webovej metódy sa autentifikácia klienta vykoná na základe autentifikačného lístka a komunikácia prebieha cez HTTP kanál. | ||
− | + | ||
+ | ==Databázové úložisko== | ||
Ako sme v predchádzajúcej podkapitole spomenuli, informácie o autentifikovanom klientovi sú na strane webovej služby uchovávané v relačnej databáze, konkrétne MS SQL. Pre komunikáciu s databázovým úložiskom sme mohli použiť nasledujúce technológie: | Ako sme v predchádzajúcej podkapitole spomenuli, informácie o autentifikovanom klientovi sú na strane webovej služby uchovávané v relačnej databáze, konkrétne MS SQL. Pre komunikáciu s databázovým úložiskom sme mohli použiť nasledujúce technológie: | ||
Riadok 166: | Riadok 178: | ||
* ODBC, | * ODBC, | ||
* OLEDB. | * OLEDB. | ||
− | Tým je zabezpečená možnosť upraviť databázové | + | V praktickej časti sme vytvorili triedu AbstractDatabase podľa návrhového vzoru Abstract Factory, ktorá umožňuje flexibilne vytvoriť triedu na prístup k databázovému úložisku podľa konkrétneho DBMS. Tým je zabezpečená možnosť upraviť databázové úložisko pre potreby praxe. Pri komplexnej podnikovej aplikácii by bolo najvýhodnejšie použiť ORM Framework napr. NHibernate. Dosiahli by sme separáciu objektového kódu od databázového kódu a znížili závislosť logickej vrstvy od bussines vrstvy. Použitie ORM Frameworku je nad rámec tejto práce, ale považovali sme za vhodné ho spomenúť. |
+ | |||
− | + | ==Spracovanie SOAP správ== | |
− | Jedným z prvkov na zabezpečenie integrity a dôvernosti komunikácie medzi klientskou aplikáciou a XML ASP.NET webovou službou je mechanizmus | + | Jedným z prvkov na zabezpečenie integrity a dôvernosti komunikácie medzi klientskou aplikáciou a XML ASP.NET webovou službou je mechanizmus šifrovania a digitálneho podpisovania SOAP správ'''. '''Predtým, než si opíšeme spôsob, akým sú šifrované a podpisované SOAP správy, sa musíme oboznámiť so spôsobom, akým sú spracovávané SOAP správy na strane webovej služby aj na strane klientskej aplikácie. |
− | Spracovávanie SOAP správ na strane webovej služby ale aj na strane klienta prebieha v 2 etapách <nowiki>[</nowiki>3<nowiki>]</nowiki>: | + | Spracovávanie SOAP správ na strane webovej služby, ale aj na strane klienta prebieha v 2 etapách <nowiki>[</nowiki>3<nowiki>]</nowiki>: |
1. '''Serializácia.''' Požiadavka klienta alebo odpoveď webovej služby je serializovaná ako XML schéma. | 1. '''Serializácia.''' Požiadavka klienta alebo odpoveď webovej služby je serializovaná ako XML schéma. | ||
Riadok 178: | Riadok 191: | ||
2. '''Deserializácia'''. SOAP správa je deserializovaná na dátové typy. | 2. '''Deserializácia'''. SOAP správa je deserializovaná na dátové typy. | ||
− | Aby sme mohli pristupovať k jednotlivým etapám spracovania SOAP správ, musíme implementovať mechanizmus SOAP rozšírenia na strane webovej služby ale aj na strane klientskej aplikácie. Prístup k etapám serializácie a deserializácie je nutná podmienka na šifrovanie a digitálne podpisovanie SOAP správ | + | Aby sme mohli pristupovať k jednotlivým etapám spracovania SOAP správ, musíme implementovať mechanizmus SOAP rozšírenia na strane webovej služby, ale aj na strane klientskej aplikácie. Prístup k etapám serializácie a deserializácie je nutná podmienka na šifrovanie a digitálne podpisovanie SOAP správ |
− | + | ==Rozšírenie SOAP== | |
− | Rozšírenie SOAP predstavuje mechanizmus akým môžeme manipulovať | + | Rozšírenie SOAP predstavuje mechanizmus akým môžeme manipulovať so SOAP správami na strane klienta aj na strane webovej služby. Tento spôsob je veľmi flexibilný, o čom sa presvedčíme neskôr. Pokiaľ vytvoríme SOP rozšírenie, spracovanie SOAP správ prechádza 4 etapami <nowiki>[</nowiki>3<nowiki>]</nowiki>: |
− | * '''BeforeDeserialize'''. Táto sa spúšťa v okamihu, keď webový server, poprípade objekt proxy | + | * '''BeforeDeserialize'''. Táto sa spúšťa v okamihu, keď webový server, poprípade objekt proxy dostanú SOAP správu. |
− | * '''AfterDeserialize'''. V tejto etape je | + | * '''AfterDeserialize'''. V tejto etape je nespracovaná (raw) SOAP správa prevedená na dátové typy platformy .NET Framework. Vykonáva sa ešte pred spustením webovej metódy. |
− | * '''BeforeSerialize. '''V tejto etape sa už spracováva kód webovej metódy, ale návratová hodnota webovej metódy | + | * '''BeforeSerialize. '''V tejto etape sa už spracováva kód webovej metódy, ale návratová hodnota webovej metódy nie je ešte serializovaná do SOAP správy. |
* '''AfterSerialize'''. V tejto etape je návratová hodnota webovej metódy serializovaná do SOAP správy, ale tá ešte nie je odoslaná na klientsku aplikáciu. | * '''AfterSerialize'''. V tejto etape je návratová hodnota webovej metódy serializovaná do SOAP správy, ale tá ešte nie je odoslaná na klientsku aplikáciu. | ||
− | V etapách '''BeforeDeserialize '''a''' AfterSerialize '''môžeme získať celý obsah SOAP správy. SOAP rozšírenie musí byť vykonávané aj na strane klienta, prostredníctvom objektu proxy. Celý proces spracovania SOAP správ je na Obr. 9.2. | + | V etapách '''BeforeDeserialize '''a''' AfterSerialize '''môžeme získať celý obsah SOAP správy. SOAP rozšírenie musí byť vykonávané aj na strane klienta, a to prostredníctvom objektu proxy. Celý proces spracovania SOAP správ je na Obr. 9.2. |
− | |||
− | Obr. | + | [[Súbor:dp_2010_jm_14.png|framed|center|Obr. 9.2 Serializácia a deserializácia SOAP správ]] |
− | + | ==Vytvorenie SOAP rozšírenia== | |
SOAP rozšírenie na platforme .NET Framework sa skladá z 2 častí <nowiki>[</nowiki>1<nowiki>]</nowiki>: | SOAP rozšírenie na platforme .NET Framework sa skladá z 2 častí <nowiki>[</nowiki>1<nowiki>]</nowiki>: | ||
− | * Samotného SOAP rozšírenia, reprezentovaného vlastnou triedou, ktorá musí | + | * Samotného SOAP rozšírenia, reprezentovaného vlastnou triedou, ktorá musí byť vytvorená odvodením z triedy '''System.Web.Protocols.SoapExtension'''. |
− | * Vlastného atribútu, ktorý sa použije u webovej metódy | + | * Vlastného atribútu, ktorý sa použije u webovej metódy na indikáciu, že na danú webovú metódu sa má aplikovať SOAP rozšírenie. SOAP atribút sa vytvára odvodením z triedy '''System.Web.Protocols.SoapExtensionAttribute'''. |
+ | |||
− | + | ===Atribút pre SOAP rozšírenie - SecureExtensionAttribute=== | |
− | Atribút SOAP rozšírenia umožňuje spojiť konkrétne rozšírenie SOAP s metódami webovej triedy. Vytvára sa odvodením z triedy '''System.Web.Protocols.SoapExtensionAttribute '''<nowiki>[</nowiki>1<nowiki>]</nowiki> | + | Atribút SOAP rozšírenia umožňuje spojiť konkrétne rozšírenie SOAP s metódami webovej triedy. Vytvára sa odvodením z triedy '''System.Web.Protocols.SoapExtensionAttribute. '''<nowiki>[</nowiki>1<nowiki>]</nowiki> Atribút pre SOAP rozšírenie je v našej webovej službe implementovaný prostredníctvom triedy''' SecureExtensionAttribute''' |
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.5''' Atribút SoapExtension | |
|- | |- | ||
+ | |<source lang="csharp"> | ||
+ | [AttributeUsage(AttributeTargets.Method)] | ||
+ | public class SecureExtensionAttribute : SoapExtensionAttribute | ||
+ | {...} | ||
+ | </source> | ||
|} | |} | ||
Trieda pre SOAP rozšírenie obsahuje atribút AttributeUsage. Pomocou neho špecifikujeme oblasť použitia nášho atribútu. Náš atribút bude teda použitý na jednotlivé deklarácie webových metód. | Trieda pre SOAP rozšírenie obsahuje atribút AttributeUsage. Pomocou neho špecifikujeme oblasť použitia nášho atribútu. Náš atribút bude teda použitý na jednotlivé deklarácie webových metód. | ||
− | V našej triede pre SOAP rozšírenie | + | V našej triede pre SOAP rozšírenie je nutné prekryť 2 abstraktné vlastnosti, ktoré trieda získala odvodením z triedy System.Web.Protocols.SoapExtensionAttribute. Ide o vlastnosti <nowiki>[</nowiki>3<nowiki>]</nowiki> : |
+ | |||
+ | * '''Priority'''. Slúži na nastavenie poradia, v akom sa spracujú SOAP rozšírenia, pokiaľ ich je na webovú metódu nakonfigurovaných viacero. | ||
+ | * '''ExtensionType.''' Vracia objekt Type, ktorý reprezentuje našu vlastnú triedu pre SOAP rozšírenia. | ||
+ | Trieda '''SecureExtensionAttribute''' pre atribút SOAP rozšírenia implementuje metódu '''SoapElement''', pomocou ktorej budeme konfigurovať, ktoré časti SOAP správy budú šifrované. Konfigurácia sa vykonáva prostredníctvom Xpath výrazu. | ||
− | |||
− | |||
− | |||
− | + | ===Trieda SOAP rozšírenia - SecureExtension=== | |
− | SOAP rozšírenie je implementované v našej webovej službe prostredníctvom triedy''' SecureExtension. '''Každá trieda pre SOAP rozšírenie musí byť vytvorená odvodením z '''System.Web.Protocols.SoapExtension.'''<nowiki>[</nowiki>1<nowiki>]</nowiki>. V Tab. 9.6 sú povinné metódy, ktoré | + | SOAP rozšírenie je implementované v našej webovej službe prostredníctvom triedy''' SecureExtension. '''Každá trieda pre SOAP rozšírenie musí byť vytvorená odvodením z '''System.Web.Protocols.SoapExtension. '''<nowiki>[</nowiki>1<nowiki>]</nowiki>. V Tab. 9.6 sú povinné metódy, ktoré musíme prekryť pri vytváraní triedy pre SOAP rozšírenie. |
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.6'''' Trieda SOAP rozšírenia | |
|- | |- | ||
+ | |<source lang="csharp"> | ||
+ | public class SecureExtension : SoapExtension | ||
+ | {...} | ||
+ | </source> | ||
|} | |} | ||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | '''Tab. 9.7''' Povinné metódy triedy SOAP rozšírenia | ||
|align = "justify"|'''Metóda''' | |align = "justify"|'''Metóda''' | ||
|align = "justify"|'''Popis''' | |align = "justify"|'''Popis''' | ||
|- | |- | ||
|align = "justify"|GetInitializer() | |align = "justify"|GetInitializer() | ||
− | |align = "justify"|Táto metóda predáva počiatočné informácie pre SOAP rozšírenie. Je spúšťaná pri prvom vykonaní SOAP rozšírenia. To umožňuje inicializovať hodnoty niektorých dát, ktoré sa použijú pri | + | |align = "justify"|Táto metóda predáva počiatočné informácie pre SOAP rozšírenie. Je spúšťaná pri prvom vykonaní SOAP rozšírenia. To umožňuje inicializovať hodnoty niektorých dát, ktoré sa použijú pri spracovaní SOAP správ. Takisto v tejto metóde môžeme extrahovať hodnoty atribútu pre SOAP rozšírenie. Táto metóda má dve verzie. Volá sa vždy len jedna, v závislosti od toho či je SOAP rozšírenie nakonfigurované prostredníctvom atribútu alebo konfiguračného súboru. |
|- | |- | ||
|align = "justify"|Initialize() | |align = "justify"|Initialize() | ||
Riadok 247: | Riadok 268: | ||
|- | |- | ||
|align = "justify"|ChainStream() | |align = "justify"|ChainStream() | ||
− | |align = "justify"|Metóda umožňuje získať prístup k SOAP | + | |align = "justify"|Metóda umožňuje získať prístup k SOAP bez prerušenia iných rozšírení. |
|- | |- | ||
|} | |} | ||
Riadok 253: | Riadok 274: | ||
Trieda SOAP rozšírenia SecureExtension implementuje v sebe dve pomocné metódy : | Trieda SOAP rozšírenia SecureExtension implementuje v sebe dve pomocné metódy : | ||
− | * '''RequestMessage''' | + | * '''RequestMessage'''. Jej úlohou je predať SOAP stream objektu typu SecureExtensionUtilities na dešifrovanie a overenie digitálneho podpisu SOAP požiadavky. |
− | * '''ResponseMessage''' | + | * '''ResponseMessage'''. Jej úlohou je predať SOAP stream objektu typu SecureExtensionUtilities na zašifrovanie a digitálne podpísanie SOAP odpovede . |
− | SOAP rozšírenie je v podobnej forme implementované aj na strane klienta, s malými zmenami . | + | SOAP rozšírenie je v podobnej forme, s malými zmenami, implementované aj na strane klienta, s malými zmenami . |
− | + | ===Metóda ProcessMessage=== | |
Metóda ProcessMessage je volaná ASP.NET v týchto štyroch etapách <nowiki>[</nowiki>4<nowiki>]</nowiki>: | Metóda ProcessMessage je volaná ASP.NET v týchto štyroch etapách <nowiki>[</nowiki>4<nowiki>]</nowiki>: | ||
Riadok 272: | Riadok 293: | ||
Etapa '''BeforeDeserialize''' je prvou etapou spracovanie SOAP požiadavky od klienta. V tejto etape sa na strane webovej služby vykonáva: | Etapa '''BeforeDeserialize''' je prvou etapou spracovanie SOAP požiadavky od klienta. V tejto etape sa na strane webovej služby vykonáva: | ||
− | * Načítanie hodnoty autentifikačného | + | * Načítanie hodnoty autentifikačného lístka z hlavičky SOAP správy od klienta. |
− | * Overenie platnosti autentifikačného | + | * Overenie platnosti autentifikačného lístka. Autentifikačný lístok sa vydáva klientovi s obmedzenou časovou platnosťou. V databáze na strane webovej služby je každá hodnota autentifikačného lístka spojená s časom, kedy bol lístok vydaný. Na základe hodnoty lístka sú načítané parametre AES šifry a verejný kľúč klienta. |
− | * Po úspešnom overení | + | * Po úspešnom overení lístka je SOAP stream predaný na dešifrovanie a overenie digitálneho podpisu prostredníctvom pomocnej metódy '''RequestMessage. '''Proces dešifrovania a overenia digitálneho podpisu je vykonávaný triedou SecureExtensionUtilities. Táto trieda bude popísaná v samostatnej podkapitole. |
+ | Spracovanie SOAP správy v etape BeforeDeserialize je znázornené na Obr. 9.3. | ||
− | |||
− | [[ | + | [[Súbor:dp_2010_jm_15.png|framed|center|Obr. 9.3 Spracovanie SOAP správy v etape BeforeDeserialize]] |
− | |||
− | Etapa''' AfterSerialize''' je poslednou etapou | + | Etapa''' AfterSerialize''' je poslednou etapou spracovania SOAP odpovede zasielanej na klienta. V tejto etape sa na strane webovej služby vykonáva: |
* Predanie SOAP streamu na digitálne podpísanie a zašifrovanie SOAP správy prostredníctvom pomocnej metódy '''ResponseMessage'''. Samotný proces šifrovania a digitálneho podpisovania je vykonávaný triedou SecureExtensionUtilities. | * Predanie SOAP streamu na digitálne podpísanie a zašifrovanie SOAP správy prostredníctvom pomocnej metódy '''ResponseMessage'''. Samotný proces šifrovania a digitálneho podpisovania je vykonávaný triedou SecureExtensionUtilities. | ||
− | + | Hlavnou úlohou triedy SecureExtension je: | |
− | * Počiatočná autentifikácia klienta na základe hodnoty | + | * Počiatočná autentifikácia klienta na základe hodnoty lístka v SOAP hlavičke. |
* Načítanie AES parametrov a verejného kľúča z databázy. | * Načítanie AES parametrov a verejného kľúča z databázy. | ||
− | * Predanie SOAP streamov na spracovanie triede '''SecureExtensionUtilities''' | + | * Predanie SOAP streamov na spracovanie triede '''SecureExtensionUtilities''' |
− | |||
− | Obr. | + | [[Súbor:dp_2010_jm_16.png|framed|center|Obr. 9.4 Životný cyklus triedy SecureExtension]] |
− | + | ==Šifrovanie a dešifrovanie== | |
− | Úlohou šifrovania je zabezpečiť dôvernosť a integritu | + | Úlohou šifrovania je zabezpečiť dôvernosť a integritu komunikácie na komunikačnej ceste, ktorú tvorí viacero uzlov, čiže vykryť nedostatky technológie SSL. Šifrovanie SOAP správ predstavuje tzv. zabezpečenie na úrovni správ. V našej bezpečnostnej platforme je umožnené selektívne šifrovanie SOAP, ktoré sa dá podľa potreby nastavovať pomocou atribútov SOAP rozšírenia. |
− | Šifrovanie a dešifrovanie SOAP správ je vykonávané v triede SecureExtensionUtilities. Skôr ako | + | Šifrovanie a dešifrovanie SOAP správ je vykonávané v triede SecureExtensionUtilities. Skôr ako vysvetlíme, akým spôsobom je zabezpečená dôvernosť a integrita komunikácie, rozoberieme si nevýhody použitia samotnej technológie SSL. |
− | |||
− | + | ===Nevýhody technológie SSL=== | |
− | + | Veľmi rozšíreným spôsobom zabezpečenia komunikácie webových aplikácií je použitie technológie SSL, ktorú sme si popísali v podkapitole 4.1. Pre zabezpečenie webových služieb nie je táto technológia veľmi vhodná. Medzi obmedzenia SSL v spojitosti s XML webovými službami patrí: | |
− | |||
− | |||
− | + | * SSL predstavuje tzv. end - to - end zabezpečenie komunikácie. Pokrytý je len odosielateľ a príjemca správy. Pre XML webové služby je nutné zabezpečiť komunikáciu medzi každými dvoma uzlami komunikácie, ide o tzv. point – to – point zabezpečenia. | |
+ | * SSL predstavuje zabezpečenie komunikácie iba na transporte. Pre webové služby je vhodnejšie zabezpečenie na úrovni správ. SSL je závislé na HTTP protokole. | ||
+ | * SSL šifruje celú komunikáciu, neumožňuje selektívne šifrovanie a takisto nepodporuje v plnej miere mechanizmus nepopierateľnosti. Pre webové služby, ktoré sú súčasťou SOA, je selektívne šifrovanie nutnou podmienkou. | ||
− | |||
− | + | [[Súbor:dp_2010_jm_17.png|framed|center|Obr. 9.5 Point-to-point a end-to-end zabezpečenie]] | |
− | + | ===Advanced Encryption Standard=== | |
− | Ďalšia komunikácia je šifrovaná pomocou symetrického šifrovacieho algoritmu. Ako šifrovací algoritmus sme zvolili symetrický blokový algoritmus Rijndael, ktorý bol v roku 1997 | + | Pri počiatočnej výmene konfiguračného XML dokumentu je využitá asymetrická šifra RSA s využitím kľúčov z certifikátov webovej služby a klienta. Ďalšia komunikácia je šifrovaná pomocou symetrického šifrovacieho algoritmu. Ako šifrovací algoritmus sme zvolili symetrický blokový algoritmus Rijndael, ktorý bol v roku 1997 vyhlásený americkým úradom pre štandardizáciu (NIST) ako štandard. Dodnes nie sú známe dôkazy o jeho prelomení. <nowiki>[</nowiki>23<nowiki>]</nowiki> |
− | AES predstavuje blokový šifrovací algoritmus so šírkou bloku 128 bitov a možnými dĺžkami kľúčov 128, 192 a 256. Rijndael podporuje aj voliteľné väčšie dátové bloky a kľúče v 32 bitových prírastkoch, ale tie nie sú zahrnuté v špecifikácii štandardu AES.<nowiki>[</nowiki>22<nowiki>]</nowiki> | + | AES predstavuje blokový šifrovací algoritmus so šírkou bloku 128 bitov a možnými dĺžkami kľúčov 128, 192 a 256. Rijndael podporuje aj voliteľné väčšie dátové bloky a kľúče v 32- bitových prírastkoch, ale tie nie sú zahrnuté v špecifikácii štandardu AES. <nowiki>[</nowiki>22<nowiki>]</nowiki> |
− | |||
− | + | ==Trieda SecureExtensionUtilities== | |
− | Trieda SecureExtensionUtilities zabezpečuje šifrovanie, dešifrovanie, digitálne podpisovanie a verifikáciu digitálneho podpisu SOAP správ. | + | Ako už bolo spomenuté, SOAP správy sú šifrované pomocou symetrickej šifry Rijndael, ktoré časti SOAP správy budú šifrované, je určené pomocou atribútov SOAP rozšírenia. Trieda SecureExtensionUtilities zabezpečuje šifrovanie, dešifrovanie, digitálne podpisovanie a verifikáciu digitálneho podpisu SOAP správ. |
− | SecureExtensionUtilities | + | SecureExtensionUtilities implementuje v sebe dve hlavné verejné metódy: |
* '''InSoap,''' | * '''InSoap,''' | ||
− | * '''OutSoap | + | * '''OutSoap,''' |
− | + | a tieto pomocné privátne metódy: | |
* DecryptString, metóda dešifruje textový reťazec z XML dokumentu. | * DecryptString, metóda dešifruje textový reťazec z XML dokumentu. | ||
Riadok 343: | Riadok 359: | ||
Metóda''' InSoap''' spracováva stream SOAP požiadavky od klienta. Táto metóda je volaná v etape BeforeDeserialize metódy ProcessMessage. Ako vstupné parametre akceptuje: | Metóda''' InSoap''' spracováva stream SOAP požiadavky od klienta. Táto metóda je volaná v etape BeforeDeserialize metódy ProcessMessage. Ako vstupné parametre akceptuje: | ||
− | * string<nowiki>[]</nowiki> soapElement, | + | * string<nowiki>[]</nowiki> soapElement určuje, ktoré elementy SOAP správy budú šifrované. |
− | * Stream inputStream | + | * Stream inputStream predstavuje raw SOAP správu. |
* User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta. | * User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta. | ||
+ | Ak nie je SOAP správa šifrovaná, metóda InSoap vráti ASP.NET vstupný SOAP prúd. Celý proces spracovania je znázornený na Obr. 9.3. Pokiaľ príde k zmene SOAP správy počas prenosu cez HTTP kanál, čiže overenie digitálneho podpisu SOAP správy indikuje sfalšovanie alebo podvrhnutie, klient je upozornený a nepríde k spracovaniu SOAP správy, či už na strane webovej služby, alebo na strane klientskej aplikácie. | ||
− | + | '''Overovanie digitálneho podpisu na strane klienta''' je '''realizované '''obdobným spôsobom, rozdiel je v tom, že podpisovanie SOAP správ realizuje objekt '''proxy''', v ktorom je implementované samotné SOAP rozšírenie. Na overovanie je použitý verejný kľúč zo serverového certifikátu webovej služby. Úlohou metódy InSoap je teda dešifrovať SOAP správu a overiť jej digitálny podpis. | |
− | |||
− | '''Overovanie digitálneho podpisu na strane klienta''' je '''realizované '''obdobným spôsobom, rozdiel je v tom že podpisovanie SOAP správ realizuje objekt '''proxy''', v ktorom je implementované samotné SOAP rozšírenie. Na overovanie je | ||
− | |||
− | |||
− | |||
− | |||
− | Metóda''' OutSoap''' spracováva stream SOAP odpovede zasielaného na klienta. Táto metóda je volaná v etape AfterSerialize metódy ProcessMessage. | + | Metóda''' OutSoap''' spracováva stream SOAP odpovede zasielaného na klienta. Táto metóda je volaná v etape AfterSerialize metódy ProcessMessage. Metóda OutSoap ako vstupné parametre akceptuje: |
− | * string<nowiki>[]</nowiki> soapElement, | + | * string<nowiki>[]</nowiki> soapElement určuje, ktoré elementy SOAP správy budú šifrované. |
− | * Stream inputStream | + | * Stream inputStream predstavuje raw SOAP správu. |
* User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta. | * User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta. | ||
* X509Certificate2 webServiceCert, objekt typu X509Certificate2 predstavuje serverový certifikát so súkromným kľúčom, ktorý sa použije na digitálne podpísanie SOAP správy. | * X509Certificate2 webServiceCert, objekt typu X509Certificate2 predstavuje serverový certifikát so súkromným kľúčom, ktorý sa použije na digitálne podpísanie SOAP správy. | ||
− | Úlohou tejto metódy je digitálne podpísať a zašifrovať SOAP správu Každá zašifrovaná SOAP správa od klienta má v SOAP hlavičke | + | Úlohou tejto metódy je digitálne podpísať a zašifrovať SOAP správu. Každá zašifrovaná SOAP správa od klienta má v SOAP hlavičke umiestnený dodatočný '''element IsEncrypted''', ktorý slúži na identifikáciu, či je daná SOAP správa zašifrovaná. V Tab. 9.8 je ukážka zašifrovania SOAP správy |
− | |||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.8''' Ukážka zašifrovanie SOAP správy | |
|- | |- | ||
+ | |<source lang="xml"> | ||
+ | <?xml version="1.0" encoding="utf-8" ?> | ||
+ | <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" | ||
+ | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Header> | ||
+ | <TicketHeader xmlns="http://tempuri.org/"> | ||
+ | <Ticket>2541a182-8f4f-46c3-84f7-e667c221f494</Ticket> | ||
+ | </TicketHeader> | ||
+ | <IsEncrypted /> | ||
+ | </soap:Header> | ||
+ | <soap:Body> | ||
+ | <SseReadPatient xmlns="http://tempuri.org/"> | ||
+ | <id>Wk/C7PGSj/+fg2jQhQlUyg==</id> | ||
+ | </SseReadPatient> | ||
+ | </soap:Body> | ||
+ | <</soap:Envelope> | ||
+ | </source> | ||
|} | |} | ||
− | Digitálne podpisovanie SOAP správ je realizované prostredníctvom '''štandardu XML Signature''', | + | Digitálne podpisovanie SOAP správ je realizované prostredníctvom '''štandardu XML Signature''', ktorý sme si popísali v podkapitole 8.1. SOAP správy sú podpisované na strane servera prostredníctvom súkromného kľúča zo serverového certifikátu. Na strane klienta je digitálne podpisovanie realizované prostredníctvom súkromného kľúča z klientskeho certifikátu. V Tab. 9.9 je ukážka podpísanej SOAP správy. |
'''Digitálne podpisovanie na strane klienta''' je '''realizované '''obdobným spôsobom, rozdiel je v tom že podpisovanie SOAP správ realizuje objekt '''proxy''', v ktorom je implementované samotné SOAP rozšírenie. Na podpísanie SOAP správy je použitý súkromný kľúč z klientskeho certifikátu. | '''Digitálne podpisovanie na strane klienta''' je '''realizované '''obdobným spôsobom, rozdiel je v tom že podpisovanie SOAP správ realizuje objekt '''proxy''', v ktorom je implementované samotné SOAP rozšírenie. Na podpísanie SOAP správy je použitý súkromný kľúč z klientskeho certifikátu. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.9''' Podpísaná SOAP správa | |
|- | |- | ||
+ | |<source lang="xml"> | ||
+ | <soap:Envelope:xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" | ||
+ | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xmlns:xsd="http://www.w3.org/2001/XMLSchema"> | ||
+ | <soap:Body> | ||
+ | </soap:Body> | ||
+ | <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> | ||
+ | <SignedInfo> | ||
+ | <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /> | ||
+ | <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /> | ||
+ | <Reference URI=""> | ||
+ | <Transforms> | ||
+ | <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /> | ||
+ | </Transforms> | ||
+ | <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /> | ||
+ | <DigestValue>2yfAuq6taP4kPBsFEM+J79F7ysM=</DigestValue> | ||
+ | </Reference> | ||
+ | </SignedInfo> | ||
+ | <SignatureValue>r2NmZyXtsku0WfbAJ4Kej/Kx0W0hAYCGAq7ltU7P5EN/NfQLYtZBCr97KHqNHkrEOqnU8Freg6 | ||
+ | hEg1LXBhrkmF86bOApHTfOrdzpeK1WjK/tKO2G+xigjD8/PBhQszRK/qfG54gdY3kJ/y/kmn/S | ||
+ | F+W49scLowecDxxeIx29UeI3m4yF8GoDGL3xjB/sEN78u8owdaBVcwkH2jIHWz6CiwPHk7YNLF | ||
+ | c/Q0/XqE/ieBnAB2i0gLbM377AdHr9qLwMHVG/M9RVyl0JkWnUI8Viwm3Y268xz7cNlTnfa3uT | ||
+ | hOGHMgmVDrBboHL44zZIBAZbsNsbqSPEipTMDVc7efC0Vg== | ||
+ | </SignatureValue> | ||
+ | </Signature> | ||
+ | </soap:Envelope> | ||
+ | </source> | ||
|} | |} | ||
− | Pri digitálnom | + | Pri digitálnom podpisovaní sme použili kanonizačný algoritmus na element '''<nowiki><</nowiki>SignedInfo<nowiki>></nowiki>'''. Použitie je indikované prostredníctvom elementu CanonicalizationMethodAlgorithm. Je to z toho dôvodu, aby sme zabránili rozdielnym výsledkom pri overovaní digitálneho podpisu. Nakoľko textová reprezentácia XML môže byť spracovaná rozdielne v závislosti použitého dátového prúdu (prázdne tagy, white space, komentáre...), kanonizácia definuje presnú fyzickú štruktúru dokumentu. |
− | |||
− | |||
{|class="wikitable" | {|class="wikitable" | ||
+ | '''Tab. 9.10''' Zoznam algoritmom použitých pri digitálnom podpisovaní SOAP | ||
|align = "justify"|'''Algoritmus''' | |align = "justify"|'''Algoritmus''' | ||
|align = "justify"|'''Popis''' | |align = "justify"|'''Popis''' | ||
Riadok 402: | Riadok 450: | ||
|align = "justify"|Kanonizačný algoritmus. | |align = "justify"|Kanonizačný algoritmus. | ||
|- | |- | ||
− | |} | + | |} |
− | V tejto podkapitole sme si popísali štruktúru triedy SecureExtensionUtilities, vysvetlili sme si akým spôsobom je spracovaný SOAP stream z triedy SOAP | + | V tejto podkapitole sme si popísali štruktúru triedy SecureExtensionUtilities, vysvetlili sme si akým spôsobom je spracovaný SOAP stream z triedy SOAP rozšírenia, a taktiež digitálne podpisovanie, verifikáciu, šifrovanie a dešifrovanie SOAP správ. |
− | + | ==Autorizácia v SOAP Security Enhancement== | |
Selektívne šifrovanie a digitálne podpisovanie má ochrániť samotnú komunikáciu medzi webovou službou a jej klientom. Úlohou autorizácie je rozhodnúť, aké operácie bude môcť autentifikovaný užívateľ vykonávať a k akým zdrojom bude mať prístup na strane webovej služby. Pri vytváraní autorizačných pravidiel sme mali tieto možnosti: | Selektívne šifrovanie a digitálne podpisovanie má ochrániť samotnú komunikáciu medzi webovou službou a jej klientom. Úlohou autorizácie je rozhodnúť, aké operácie bude môcť autentifikovaný užívateľ vykonávať a k akým zdrojom bude mať prístup na strane webovej služby. Pri vytváraní autorizačných pravidiel sme mali tieto možnosti: | ||
− | * Vytvoriť autorizačné pravidlá v konfiguračnom súbore webovej služby | + | * Vytvoriť autorizačné pravidlá v konfiguračnom súbore webovej služby. Týmto spôsobom sme sa zaoberali v podkapitole 6.1. |
* Namapovať klientske certifikáty na užívateľské účty systému Windows prostredníctvom IIS. | * Namapovať klientske certifikáty na užívateľské účty systému Windows prostredníctvom IIS. | ||
− | * Použiť niektorý zo spôsobov impersonácie, | + | * Použiť niektorý zo spôsobov impersonácie, ktorými sme sa zaoberali v podkapitole 5.2.1. |
− | + | Použitie autorizačných pravidiel v súbore web.config je relatívne flexibilný spôsob autorizácie, ale neposkytuje také pokročilé možnosti ako impersonácia. Rozhodli sme sa použiť programovú impersonáciu, a to z nasledujúcich dôvodov : | |
− | Použitie autorizačných pravidiel v súbore web.config je relatívne flexibilný spôsob autorizácie, ale neposkytuje také pokročilé možnosti ako impersonácia. Rozhodli sme sa použiť programovú impersonáciu a to | ||
− | * Umožňuje mapovanie | + | * Umožňuje mapovanie klientskych certifikátov na užívateľské účty systému dvoma rôznymi spôsobmi : |
* One – to – one, | * One – to – one, | ||
* Many – to – one. | * Many – to – one. | ||
− | * Programová impersonácia nám umožní flexibilne nastaviť, ktorá časť programového kódu bude vykonávaná pod účtom Network Service | + | * Programová impersonácia nám umožní flexibilne nastaviť, ktorá časť programového kódu bude vykonávaná pod účtom Network Service a ktorá pod nami zvoleným užívateľským účtom. Tento spôsob sa prostredníctvom mapovania klientskych certifikátov na IIS nedá docieliť. |
− | |||
Proces programovej impersonácie je nasledovný : | Proces programovej impersonácie je nasledovný : | ||
− | * V databáze je | + | * V databáze je priradený ku každému klientskemu certifikátu jeden užívateľský účet systému Windows. |
* Pri úspešnej počiatočnej autentifikácii klienta prostredníctvom certifikátu, sa jeho autentifikačný lístok namapuje na užívateľský účet. | * Pri úspešnej počiatočnej autentifikácii klienta prostredníctvom certifikátu, sa jeho autentifikačný lístok namapuje na užívateľský účet. | ||
+ | Programová impersonácia je vykonávaná triedou UserImpersonation, ktorá obsahuje tieto metódy : | ||
+ | |||
+ | * Login - získa príznak účtu užívateľa Windows. | ||
+ | * Impersonate - spustí proces vykonávania programového kódu v kontexte identity užívateľského účtu. Pokiaľ klientov autentifikačný lístok nie je namapovaný na užívateľský účet, programový kód bude vykonávaný pod účtom Network Service, ktorý predstavuje prednastavený účet pre spracovanie ASPNET na systéme Windows Server 2003. | ||
+ | * UndoImpersonate - ukončí impersonáciu programového kódu. | ||
+ | Prostredníctvom užívateľských účtov Windows môžeme jednotlivým klientom webovej služby vyčleniť prístup k súborom na disku, k databáze a pod. Použitie triedy UserImpersonate je znázornené v Tab. 9.11. | ||
+ | |||
+ | {|class="wikitable" | ||
+ | '''Tab. 9.11''' Použitie triedy UserImpersonate | ||
+ | |- | ||
+ | |<source lang="csharp"> | ||
+ | UserImpersonation _objImp = new UserImpersonation(); | ||
+ | |||
+ | _objImp.ReadUserAccount(Ticket.Ticket); | ||
− | + | _objImp.Login(); | |
− | + | _objImp.Impersonate(); | |
− | |||
− | |||
− | + | //programový kód, ktorý ma byť vykonáný pod inou identitou | |
− | + | _objImp.UndoImpesonate(); | |
− | + | </source> | |
− | |||
− | |||
|} | |} | ||
− | |||
− | V minulosti sa na zabezpečenie ASP.NET webových služieb využívalo rozšírenie Web Services Enhancements (WSE)<nowiki>[</nowiki>25<nowiki>]</nowiki>,<nowiki>[</nowiki>26<nowiki>]</nowiki>,<nowiki>[</nowiki>27<nowiki>]</nowiki>. Súčasná verzia 3.0 nepodporuje ASP.NET webové služby. Preto je veľmi | + | ==Výhody SOAP Security Enhancement pre ASP.NET webové služby== |
+ | |||
+ | V minulosti sa na zabezpečenie ASP.NET webových služieb využívalo rozšírenie Web Services Enhancements (WSE) <nowiki>[</nowiki>25<nowiki>]</nowiki>, <nowiki>[</nowiki>26<nowiki>]</nowiki>, <nowiki>[</nowiki>27<nowiki>]</nowiki>. Súčasná verzia 3.0 nepodporuje ASP.NET webové služby. Preto je veľmi ťažké porovnať navrhovanú vlastnú bezpečnostnú platformu s nejakým oficiálnym spôsobom zabezpečenia. Jediným možným riešením bolo porovnať spôsob zabezpečenia s rozšírením WSE 2.0. Tento produkt mal veľmi veľa problémov v oblasti interoperability a takisto je zastaralý. Preto sme sa vyhli porovnaniu našej bezpečnostnej platformy s týmto rozšírením. | ||
− | Naša bezpečnostná platforma poskytuje zabezpečenie na úrovni aplikácie a | + | :Naša bezpečnostná platforma poskytuje zabezpečenie na úrovni aplikácie a taktiež na úrovni správ. Poskytuje dva spôsoby autentifikácie : |
* Počiatočnú autentifikáciu založenú na certifikátoch X509. Výhodou tohto spôsobu autentifikácie je dobrá kontrola nad užívateľskými identitami. | * Počiatočnú autentifikáciu založenú na certifikátoch X509. Výhodou tohto spôsobu autentifikácie je dobrá kontrola nad užívateľskými identitami. | ||
* Autentifikáciu založenú na autentifikačných lístkoch v SOAP hlavičke. Výhodou tohto spôsobu autentifikácie je : | * Autentifikáciu založenú na autentifikačných lístkoch v SOAP hlavičke. Výhodou tohto spôsobu autentifikácie je : | ||
− | * Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky pri ďalšom odosielaní SOAP správ na webovú službu | + | * Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky a pri ďalšom odosielaní SOAP správ na webovú službu posielaný aj autentifikačný lístok v SOAP hlavičke. |
− | * Pri opätovnom volaní webových metód | + | * Pri opätovnom volaní webových metód nemusí byť posielaný s požiadavkou aplikácie aj klientsky certifikát. Vďaka tomu nemusí byť opätovne použité aj HTTPS spojenie. |
− | * Autentifikačný lístok | + | * Autentifikačný lístok môže byť aplikácii vydaný s určitou časovou platnosťou, čo zvyšuje flexibilitu systému. |
− | Integrita | + | Integrita komunikácie je zabezpečená prostredníctvom digitálneho podpisovania na základe štandardu XML Signature. SOAP správy sú podpisované na základe privátnych kľúčov z certifikátov a overované na základe verejných kľúčov z certifikátov. Pokiaľ príde k zmene SOAP správy počas transferu cez HTTP kanál, čiže overenie digitálneho podpisu SOAP správy indikuje sfalšovanie alebo podvrhnutie, klient je upozornený a nepríde k spracovaniu SOAP správy, či už na strane webovej služby, alebo na strane klientskej aplikácie |
− | Dôvernosť komunikácie je založená na | + | Dôvernosť komunikácie je založená na šifrovaní SOAP správ pomocou symetrického blokového algoritmu Rijndael. Výhody: |
* SOAP správy sú selektívne šifrované, chránené sú len potrebné dáta. Selektívne šifrovanie je nevyhnutná podmienka začlenenia XML webových služieb do SOA. | * SOAP správy sú selektívne šifrované, chránené sú len potrebné dáta. Selektívne šifrovanie je nevyhnutná podmienka začlenenia XML webových služieb do SOA. | ||
− | * Výhodou voči štandardu XML Encryption je ten, že pri našom | + | * Výhodou voči štandardu XML Encryption je ten, že pri našom šifrovaní nedochádza k „deformácii" XML tagov. |
* Šifrovací algoritmus môže byť upravený podľa potreby praxe. | * Šifrovací algoritmus môže byť upravený podľa potreby praxe. | ||
− | * Šifrovanie je realizované prostredníctvom SOAP rozšírenia. To znamená, že šifruje už serializované dáta. | + | * Šifrovanie je realizované prostredníctvom SOAP rozšírenia. To znamená, že šifruje už serializované dáta. Vďaka tomu môžeme šifrovať a digitálne podpisovať aj vlastné dátové typy. |
− | * Oproti | + | * Oproti technológii SSL predstavuje náš spôsob zabezpečenia point to point, čo je ďalšia podmienka začlenenia XML webových služieb do SOA. |
− | |||
− | + | Veľkú výhodu nášho zabezpečenia vidíme v spôsobe jeho samotného použitia. Celý mechanizmus ochrany SOAP správ sa aplikuje na webovú metódu prostredníctvom atribútu SOAP rozšírenia, ktorý predstavuje len dopísanie jedného riadku kódu nad webovú metódu. Náš spôsob zabezpečenia nemení spracovanie programového kódu webovej metódy. | |
− | Tab. 9.12 | + | V Tab. 9.12 je ukážka nastavenia šifrovania elementu body SOAP správy zasielanej ako odpoveď na klientsku aplikáciu. Elementy SOAP správy, ktoré majú byť zašifrované sa zadefinujú prostredníctvom Xpath výrazu pomocou vlastnosti SoapElement triedy atribútu SOAP rozšírenia. |
{|class="wikitable" | {|class="wikitable" | ||
− | + | '''Tab. 9.12''' Použitie atribútu SOAP rozšírenia | |
|- | |- | ||
+ | |<source lang="csharp"> | ||
+ | [WebMethod] | ||
+ | [SecureExtension(SoapElement = "//soap:Body/*/*")] | ||
+ | public DataSet GetDataSet() | ||
+ | { | ||
+ | //kód webovej metódy | ||
+ | } | ||
+ | </source> | ||
|} | |} | ||
=Záver= | =Záver= | ||
− | V práci sme opísali technologické pozadie XML webových služieb a ich štandardy. Zamerali sme sa na ASP.NET webové služby. Vysvetlili sme si spôsoby, akým môžeme vytvoriť bezpečnostný komunikačný scenár medzi webovou službou a jej klientom. Rozobrali sme jednotlivé možnosti autentifikácie, autorizácie klientov webovej služby, spôsoby na zabezpečenie dôvernosti a integrity komunikácie. Uviedli sme ich výhody a nevýhody, ktoré so sebou prinášajú. | + | V práci sme opísali technologické pozadie XML webových služieb a ich štandardy. Zamerali sme sa na ASP.NET webové služby. Vysvetlili sme si spôsoby, akým môžeme vytvoriť bezpečnostný komunikačný scenár medzi webovou službou a jej klientom. Rozobrali sme jednotlivé možnosti autentifikácie, autorizácie klientov webovej služby, spôsoby na zabezpečenie dôvernosti a integrity komunikácie. Uviedli sme ich výhody a nevýhody, ktoré so sebou prinášajú. |
− | + | Upozornili sme na hlavné chyby, ktoré vznikajú pri zabezpečovaní XML webových služieb. Ide hlavne o použitie technológie SSL a štandardu XML Encryption. Samotná technológia SSL nie je postačujúca na zabezpečenie komunikácie medzi webovou službou a jej klientom, nakoľko predstavuje zabezpečenie na úrovni komunikačného kanála a predstavuje tzv. end – to – end zabezpečenie. To nie je veľmi vhodné pre XML webové služby, kedže v praxi bývajú súčasťou SOA. SOA architektúra vyžaduje selektívne šifrovanie, ktoré nie je možné dosiahnuť so štandardom XML Encryption. Pri použití tohto štandardu dochádza taktiež k deformácii XML tagov. Cieľom bezpečnostnej platformy bolo odstránenie týchto nedostatkov. Bezpečnostná platforma predstavuje zabezpečenie na úrovni aplikácie a tiež na úrovni správ. Počiatočná autentifikácia je realizovaná na základe certifikátov X509, pri volaní ďalších webových metód je klient autentifikovaný na základe autentifikačného lístka v SOAP hlavičke. Dĺžka platnosti autentifikačného lístka sa dá flexibilne meniť podľa potreby. SOAP správy sú selektívne šifrované pomocou AES, tým je dosiahnuté utajenie komunikácie. Integrita je zabezpečená prostredníctvom digitálneho podpisovania SOAP správ. Naša bezpečnostná platforma poskytuje autorizačný mechanizmus prostredníctvom programovej impersonácie. | |
− | Na otestovanie funkčnosti zabezpečenia komunikácie XML ASP.NET webovej služby bola vytvorená | + | Na otestovanie funkčnosti zabezpečenia komunikácie XML ASP.NET webovej služby bola vytvorená WinForms klientska aplikácia. |
=Použitá literatúra= | =Použitá literatúra= |
Aktuálna revízia z 14:54, 11. jún 2010
Obsah
- 1 SOAP Security Enhancement pre ASP.NET webové služby
- 1.1 Štruktúra SOAP Security Enhancement z objektovo-orientovaného prístupu
- 1.2 Autentifikácia klientov v SOAP Security Enhancement
- 1.3 Databázové úložisko
- 1.4 Spracovanie SOAP správ
- 1.5 Rozšírenie SOAP
- 1.6 Vytvorenie SOAP rozšírenia
- 1.7 Šifrovanie a dešifrovanie
- 1.8 Trieda SecureExtensionUtilities
- 1.9 Autorizácia v SOAP Security Enhancement
- 1.10 Výhody SOAP Security Enhancement pre ASP.NET webové služby
- 2 Záver
- 3 Použitá literatúra
SOAP Security Enhancement pre ASP.NET webové služby
V predchádzajúcich dvoch kapitolách sme si opísali teoretické možnosti zabezpečenia XML ASP.NET webových služieb a štandardy zamerané na bezpečnosť XML. Táto kapitola sa zaoberá vývojom vlastnej bezpečnostnej platformy pre XML ASP.NET webové služby v jazyku C , ktorú sme nazvali SOAP Security Enhancement (SSE) Naša bezpečnostná platforma bude predstavovať zabezpečenie na úrovni správ a tiež na úrovni aplikácie. Pri vytváraní bezpečnostného systému pre webové aplikácie treba zabezpečiť:
- Mechanizmus pre overovanie klientskych aplikácií. Možnosti overovania klientov sme si podrobne rozobrali v kapitolách 5, 5.1, 5.2, 5.3.
- Mechanizmus pre autorizáciu klientov overených webovou službou. Spôsobmi autorizácie sme sa zaoberali kapitolách 5.1, kde sme sa zaoberali autorizáciou s využitým webového servera IIS a takisto autorizáciou prostredníctvom konfiguračného súboru webovej služby, ktorú sme si opísali v kapitole 6.
- Mechanizmus pre zabezpečenie dôvernosti a integrity komunikácie. Spôsobov na vytvorenie bezpečnej komunikačnej linky je viacero. Najrozšírenejší spôsob je použitie technológie SSL, ktorou sme sa zaoberali v podkapitole 4.1. Táto technológia má aj svoje nedostatky, ktoré sme načrtli v kapitole 7 a s ktorými sa oboznámime v podkapitole 9.7.1.
V príslušných kapitolách sme vysvetlili výhody, nevýhody a oblasti použitia daných mechanizmov pre autentifikáciu, autorizáciu a zabezpečenie dôvernosti a integrity komunikácie. V tejto kapitole ponúkame vlastný komplexný spôsob, ako zabezpečiť komunikáciu medzi XML ASP.NET webovou službou a klientskou aplikáciou na platforme .NET Framework 3.5.
V Tab. 9.1 sú prehľadne opísané spôsoby a technológie, ktoré použijeme na autentifikáciu, autorizáciu a zabezpečenie dôvernosti a integrity komunikácie. Tie podrobnejšie popíšeme a vysvetlíme nasledujúcich podkapitolách.
Mechanizmus | Technológia |
Autentifikácia | Certifikát X509 |
Autorizácia | Autorizácia bude realizovaná prostredníctvom programovej impersonácie, ktorú sme si vysvetlili v podkapitole 5.2.1. |
Integrita a dôvernosť komunikácie | Integrita a dôvernosť komunikácie bude zabezpečená prostredníctvom selektívneho šifrovania SOAP správ s využitím Advanced Encryption Standard a prostredníctvom digitálneho podpisovania SOAP správ pomocou certifikátov X509 s využitím štandardu XML Signature. |
Štruktúra SOAP Security Enhancement z objektovo-orientovaného prístupu
V Tab. 9.2 sú prehľadne opísané základné programové triedy bezpečnostnej platformy spolu s ich funkcionalitou. Podrobnejšie budú opísané v príslušných podkapitolách.
Tab. 9.2 Triedy bezpečnostnej platformyNázov triedy | Popis |
AbstractDatabase | Trieda vytvorená podľa návrhového vzoru Abstract Factory, ktorá umožňuje flexibilne vytvoriť triedu na prístup k databázovému úložisku podľa konkrétneho DBMS. |
DbProvider | Trieda pre prístup k MS SQL databázovému úložisku. |
SecureExtension | Trieda SOAP rozšírenia umožňuje prístup k SOAP správam v rôznych etapách spracovania. |
SecureExtensionAttribute | Predstavuje atribút SOAP rozšírenia, pomocou ktorého sa špecifikujú konkrétne časti (elementy) SOAP správy ktoré budú šifrované a digitálne podpísané. |
SecureExtensionUtilities | Táto trieda obsahuje metódy na šifrovanie, dešifrovanie, digitálne podpisovanie a verifikáciu digitálneho podpisu SOAP správ. |
SecureUtilities | Zabezpečuje autentifikáciu klienta, vygenerovanie parametrov AES šifry a vytvorenie konfiguračného XML dokumentu obsahujúce parametre pre bezpečnú komunikáciu. |
TicketIdentity | Táto trieda reprezentuje autentifikačný lístok umiestnený v SOAP hlavičke klienta. |
UserData | Predstavuje „data object“ reprezentujúci údaje pre šifrovanie a digitálne podpisovanie SOAP správ. |
UserImpersonation | TTrieda zabezpečuje mechanizmus autorizácie prostredníctvom Windows impersonácie. |
Autentifikácia klientov v SOAP Security Enhancement
Možnosti na overovanie klientov pre XML ASP.NET webové služby sú značne obmedzené. Kedže webová služba neposkytuje žiaden vstavaný spôsob akým, by mohol užívateľ predložiť prihlasovacie údaje, napríklad webový formulár. Najrozšírenejšie spôsoby overovania klientov webovou službou sú tieto [1]:
- Autentifikácie Windows. Tento typ nie je veľmi flexibilný a má veľa nedostatkov, ktoré sme si opísali v kapitole 5.1.
- Vlastný typ autentifikačného procesu založeného na prihlasovacích lístkoch s využitím SOAP rozšírenia.
- Použitie klientskych certifikátov X509.
Autentifikáciu založenú na certifikátoch X509 sme zvolili z nasledujúcich dôvodov:
1. Použitie klientskych certifikátov dáva značnú kontrolu nad užívateľskými identitami, nakoľko certifikáty sú vydávané certifikačnou autoritou, ktorá býva zvyčajne pod kontrolou administrátora servera, na ktorom môže byť hosťovaná webová služba. Tak isto je možné klientske certifikáty mapovať na užívateľské účty Windows, či už priamo na webovom serveri IIS alebo priamo programovo vo webovej službe.
2. Certifikáty X509 predstavujú účinnú ochranu proti podvrhnutiu falošného verejného kľúča ( Man-in-the-Middle Attack [36] ).
3. Tak isto predstavuje účinný mechanizmus na zabezpečenie toho, že vlastník verejného kľúča má k nemu zodpovedajúci súkromný kľúč.
Certifikátom sme sa podrobnejšie venovali v podkapitole 4.1.1. Na vystavenie klientskych certifikátov sme vytvorili vlastnú testovaciu certifikačnú autoritu na operačnom systéme Windows Server 2003.
Počiatočnú autentifikáciu sme sa rozhodli teda realizovať prostredníctvom klientskych certifikátov X509. Na korektný prenos certifikátov X509 je nutný HTTPS prenos.
Kedže použitie technológie SSL má aj nedostatky a pri prenose veľkého množstva dát je náročné, rozhodli sme sa, že HTTPS kanál bude použitý pri komunikácii klienta a webovej služby iba raz, a to pri počiatočnom volaní webovej metódy, ktorá zabezpečí overenie klienta na základe klientskeho certifikátu X509. Následne bude klientovi vydaný „autentifikačný lístok", ktorý bude umiestnený do SOAP hlavičky. Lístok obsahuje 128 bitové jedinečné číslo, ktoré identifikuje užívateľa pri nasledujúcich volaniach webových metód, a je použitý na jeho overenie. Lístok sa vydáva klientovi s určitou časovou platnosťou, ktorú je možné podľa potreby a priority meniť.
Hodnota ID v autentifikačnom lístku je uložená spolu s príslušnými údajmi z klientskeho certifikátu do relačnej databázy, ktorú webová služba používa na ďalšie overovanie klienta pri volaní webových metód.
Proces prvotnej autentifikácie je nasledovný. Pri počiatočnom prístupe klienta k webovej službe musí klient zavolať webovú metódu CreateConnection webovej služby. Metóda
CreateConnection plní v komunikačnom scenári nasledujúce funkcie:
- Overenie klientskeho certifikátu.
- Vytvorenie SOAP hlavičky s užívateľským ID.
- Zápis príslušných parametrov z klientskeho certifikátu do databázy.
- Vygenerovanie a zaslanie parametrov AES, ktoré sú použité na šifrovanie SOAP správ.
Prostredníctvom vlastnosti Context, ktorú trieda webovej služby získala odvodením z abstraktnej triedy WebService (pozri podkapitola 2.1), je extrahovaný klientsky certifikát.
X509Certificate2 cert = new X509Certificate2(Context.Request.ClientCertificate.Certificate);
|
Následne je klientsky certifikát overený na revokáciu a dôveryhodnosť certifikačnej autority.
Pokiaľ je certifikát klienta úspešne overený, webová metóda CreateConnection vygeneruje hodnotu ID v autentifikačnom lístku.
Po vygenerovaní ID pre overeného klienta sú údaje z klientskeho certifikátu (verejný kľúč a common name), ID klienta spolu s dátumom a časom vytvorenia lístka zapísané do databázy. Následne je vytvorená SOAP hlavička , do ktorej je umiestnené ID užívateľa.
Výhoda vlastného autentifikačného systému na lístkoch:
- Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky pri ďalšom odosielaní SOAP správ na webovú službu posielaný aj autentifikačný lístok v SOAP hlavičke.
- Pri opätovnom volaní webových metód nemusí byť posielaný s požiadavkou aplikácie aj klientsky certifikát. Vďaka tomu nemusí byť opätovne použité aj HTTPS spojenie.
- Autentifikačný lístok môže byť aplikácii vydaný s určitou časovou platnosťou, čo zvyšuje flexibilitu systému.
Parametre AES šifry sú zaslané webovou metódou CreateConnection vo forme XML dokumentu. XML dokument je zašifrovaný pomocou RSA šifry s využitím verejného kľúča z klientskeho certifikátu.
XML dokument obsahuje parametre AES šifry a takisto verejný kľúč z certifikátu servera, na overenie digitálneho podpisu SOAP správy webovej služby.
Zašifrované XML je na strane klienta dešifrované pomocou súkromného kľúča z patričného klientskeho certifikátu.
Parametre AES šifry využíva objekt proxy na šifrovanie SOAP požiadaviek klienta.
<source lang="xml">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<TicketHeader xmlns="http://tempuri.org/">
<Ticket>f84bd797-8ea5-463c-9319-5d952ec30207</Ticket>
</TicketHeader>
</soap:Header>
<soap:Body>
</soap:Body>
</soap:Envelope>
|
Popis autentifikačného procesu na Obr. 9.1 :
1. Načítanie klientskeho certifikátu z úložiska.
2. Pridanie certifikátu k objektu proxy a zavolanie webovej metódy CreateConnection.
3. Autentifikácia klientskeho certifikátu, vydanie autentifikačného lístka, ak bol certifikát prijatý.
4. Pri následnom volaní webovej metódy sa autentifikácia klienta vykoná na základe autentifikačného lístka a komunikácia prebieha cez HTTP kanál.
Databázové úložisko
Ako sme v predchádzajúcej podkapitole spomenuli, informácie o autentifikovanom klientovi sú na strane webovej služby uchovávané v relačnej databáze, konkrétne MS SQL. Pre komunikáciu s databázovým úložiskom sme mohli použiť nasledujúce technológie:
1. LINQ to SQL [32],
2. ADO.NET [33].
LINQ to SQL poskytuje niektoré pokročilé možnosti v porovnaní s ADO.NET. Avšak samotná technológia ADO.NET poskytuje dostatočnú podporu pre rôzne DBMS [33] :
- MS SQL Server,
- MS SQL Mobile Server,
- Oracle,
- MySQL,
- ODBC,
- OLEDB.
V praktickej časti sme vytvorili triedu AbstractDatabase podľa návrhového vzoru Abstract Factory, ktorá umožňuje flexibilne vytvoriť triedu na prístup k databázovému úložisku podľa konkrétneho DBMS. Tým je zabezpečená možnosť upraviť databázové úložisko pre potreby praxe. Pri komplexnej podnikovej aplikácii by bolo najvýhodnejšie použiť ORM Framework napr. NHibernate. Dosiahli by sme separáciu objektového kódu od databázového kódu a znížili závislosť logickej vrstvy od bussines vrstvy. Použitie ORM Frameworku je nad rámec tejto práce, ale považovali sme za vhodné ho spomenúť.
Spracovanie SOAP správ
Jedným z prvkov na zabezpečenie integrity a dôvernosti komunikácie medzi klientskou aplikáciou a XML ASP.NET webovou službou je mechanizmus šifrovania a digitálneho podpisovania SOAP správ. Predtým, než si opíšeme spôsob, akým sú šifrované a podpisované SOAP správy, sa musíme oboznámiť so spôsobom, akým sú spracovávané SOAP správy na strane webovej služby aj na strane klientskej aplikácie.
Spracovávanie SOAP správ na strane webovej služby, ale aj na strane klienta prebieha v 2 etapách [3]:
1. Serializácia. Požiadavka klienta alebo odpoveď webovej služby je serializovaná ako XML schéma.
2. Deserializácia. SOAP správa je deserializovaná na dátové typy.
Aby sme mohli pristupovať k jednotlivým etapám spracovania SOAP správ, musíme implementovať mechanizmus SOAP rozšírenia na strane webovej služby, ale aj na strane klientskej aplikácie. Prístup k etapám serializácie a deserializácie je nutná podmienka na šifrovanie a digitálne podpisovanie SOAP správ
Rozšírenie SOAP
Rozšírenie SOAP predstavuje mechanizmus akým môžeme manipulovať so SOAP správami na strane klienta aj na strane webovej služby. Tento spôsob je veľmi flexibilný, o čom sa presvedčíme neskôr. Pokiaľ vytvoríme SOP rozšírenie, spracovanie SOAP správ prechádza 4 etapami [3]:
- BeforeDeserialize. Táto sa spúšťa v okamihu, keď webový server, poprípade objekt proxy dostanú SOAP správu.
- AfterDeserialize. V tejto etape je nespracovaná (raw) SOAP správa prevedená na dátové typy platformy .NET Framework. Vykonáva sa ešte pred spustením webovej metódy.
- BeforeSerialize. V tejto etape sa už spracováva kód webovej metódy, ale návratová hodnota webovej metódy nie je ešte serializovaná do SOAP správy.
- AfterSerialize. V tejto etape je návratová hodnota webovej metódy serializovaná do SOAP správy, ale tá ešte nie je odoslaná na klientsku aplikáciu.
V etapách BeforeDeserialize a AfterSerialize môžeme získať celý obsah SOAP správy. SOAP rozšírenie musí byť vykonávané aj na strane klienta, a to prostredníctvom objektu proxy. Celý proces spracovania SOAP správ je na Obr. 9.2.
Vytvorenie SOAP rozšírenia
SOAP rozšírenie na platforme .NET Framework sa skladá z 2 častí [1]:
- Samotného SOAP rozšírenia, reprezentovaného vlastnou triedou, ktorá musí byť vytvorená odvodením z triedy System.Web.Protocols.SoapExtension.
- Vlastného atribútu, ktorý sa použije u webovej metódy na indikáciu, že na danú webovú metódu sa má aplikovať SOAP rozšírenie. SOAP atribút sa vytvára odvodením z triedy System.Web.Protocols.SoapExtensionAttribute.
Atribút pre SOAP rozšírenie - SecureExtensionAttribute
Atribút SOAP rozšírenia umožňuje spojiť konkrétne rozšírenie SOAP s metódami webovej triedy. Vytvára sa odvodením z triedy System.Web.Protocols.SoapExtensionAttribute. [1] Atribút pre SOAP rozšírenie je v našej webovej službe implementovaný prostredníctvom triedy SecureExtensionAttribute
[AttributeUsage(AttributeTargets.Method)]
public class SecureExtensionAttribute : SoapExtensionAttribute
{...}
|
Trieda pre SOAP rozšírenie obsahuje atribút AttributeUsage. Pomocou neho špecifikujeme oblasť použitia nášho atribútu. Náš atribút bude teda použitý na jednotlivé deklarácie webových metód.
V našej triede pre SOAP rozšírenie je nutné prekryť 2 abstraktné vlastnosti, ktoré trieda získala odvodením z triedy System.Web.Protocols.SoapExtensionAttribute. Ide o vlastnosti [3] :
- Priority. Slúži na nastavenie poradia, v akom sa spracujú SOAP rozšírenia, pokiaľ ich je na webovú metódu nakonfigurovaných viacero.
- ExtensionType. Vracia objekt Type, ktorý reprezentuje našu vlastnú triedu pre SOAP rozšírenia.
Trieda SecureExtensionAttribute pre atribút SOAP rozšírenia implementuje metódu SoapElement, pomocou ktorej budeme konfigurovať, ktoré časti SOAP správy budú šifrované. Konfigurácia sa vykonáva prostredníctvom Xpath výrazu.
Trieda SOAP rozšírenia - SecureExtension
SOAP rozšírenie je implementované v našej webovej službe prostredníctvom triedy SecureExtension. Každá trieda pre SOAP rozšírenie musí byť vytvorená odvodením z System.Web.Protocols.SoapExtension. [1]. V Tab. 9.6 sú povinné metódy, ktoré musíme prekryť pri vytváraní triedy pre SOAP rozšírenie.
public class SecureExtension : SoapExtension
{...}
|
Metóda | Popis |
GetInitializer() | Táto metóda predáva počiatočné informácie pre SOAP rozšírenie. Je spúšťaná pri prvom vykonaní SOAP rozšírenia. To umožňuje inicializovať hodnoty niektorých dát, ktoré sa použijú pri spracovaní SOAP správ. Takisto v tejto metóde môžeme extrahovať hodnoty atribútu pre SOAP rozšírenie. Táto metóda má dve verzie. Volá sa vždy len jedna, v závislosti od toho či je SOAP rozšírenie nakonfigurované prostredníctvom atribútu alebo konfiguračného súboru. |
Initialize() | Metóda predáva počiatočné informácie pre SOAP rozšírenie. Je spúšťaná pri každom vykonaní SOAP rozšírenia. |
ProcessMessage() | Táto metóda vykonáva vlastné spracovanie SOAP rozšírenia, umožňuje modifikovať SOAP správy. V tejto metóde sú volané metódy pre šifrovanie a digitálne podpisovanie SOAP správ. |
ChainStream() | Metóda umožňuje získať prístup k SOAP bez prerušenia iných rozšírení. |
Trieda SOAP rozšírenia SecureExtension implementuje v sebe dve pomocné metódy :
- RequestMessage. Jej úlohou je predať SOAP stream objektu typu SecureExtensionUtilities na dešifrovanie a overenie digitálneho podpisu SOAP požiadavky.
- ResponseMessage. Jej úlohou je predať SOAP stream objektu typu SecureExtensionUtilities na zašifrovanie a digitálne podpísanie SOAP odpovede .
SOAP rozšírenie je v podobnej forme, s malými zmenami, implementované aj na strane klienta, s malými zmenami .
Metóda ProcessMessage
Metóda ProcessMessage je volaná ASP.NET v týchto štyroch etapách [4]:
1. BeforeDeserialize,
2. AfterDeserialize,
3. BeforeSerialize,
4. AfterSerialize.
Etapa BeforeDeserialize je prvou etapou spracovanie SOAP požiadavky od klienta. V tejto etape sa na strane webovej služby vykonáva:
- Načítanie hodnoty autentifikačného lístka z hlavičky SOAP správy od klienta.
- Overenie platnosti autentifikačného lístka. Autentifikačný lístok sa vydáva klientovi s obmedzenou časovou platnosťou. V databáze na strane webovej služby je každá hodnota autentifikačného lístka spojená s časom, kedy bol lístok vydaný. Na základe hodnoty lístka sú načítané parametre AES šifry a verejný kľúč klienta.
- Po úspešnom overení lístka je SOAP stream predaný na dešifrovanie a overenie digitálneho podpisu prostredníctvom pomocnej metódy RequestMessage. Proces dešifrovania a overenia digitálneho podpisu je vykonávaný triedou SecureExtensionUtilities. Táto trieda bude popísaná v samostatnej podkapitole.
Spracovanie SOAP správy v etape BeforeDeserialize je znázornené na Obr. 9.3.
Etapa AfterSerialize je poslednou etapou spracovania SOAP odpovede zasielanej na klienta. V tejto etape sa na strane webovej služby vykonáva:
- Predanie SOAP streamu na digitálne podpísanie a zašifrovanie SOAP správy prostredníctvom pomocnej metódy ResponseMessage. Samotný proces šifrovania a digitálneho podpisovania je vykonávaný triedou SecureExtensionUtilities.
Hlavnou úlohou triedy SecureExtension je:
- Počiatočná autentifikácia klienta na základe hodnoty lístka v SOAP hlavičke.
- Načítanie AES parametrov a verejného kľúča z databázy.
- Predanie SOAP streamov na spracovanie triede SecureExtensionUtilities
Šifrovanie a dešifrovanie
Úlohou šifrovania je zabezpečiť dôvernosť a integritu komunikácie na komunikačnej ceste, ktorú tvorí viacero uzlov, čiže vykryť nedostatky technológie SSL. Šifrovanie SOAP správ predstavuje tzv. zabezpečenie na úrovni správ. V našej bezpečnostnej platforme je umožnené selektívne šifrovanie SOAP, ktoré sa dá podľa potreby nastavovať pomocou atribútov SOAP rozšírenia.
Šifrovanie a dešifrovanie SOAP správ je vykonávané v triede SecureExtensionUtilities. Skôr ako vysvetlíme, akým spôsobom je zabezpečená dôvernosť a integrita komunikácie, rozoberieme si nevýhody použitia samotnej technológie SSL.
Nevýhody technológie SSL
Veľmi rozšíreným spôsobom zabezpečenia komunikácie webových aplikácií je použitie technológie SSL, ktorú sme si popísali v podkapitole 4.1. Pre zabezpečenie webových služieb nie je táto technológia veľmi vhodná. Medzi obmedzenia SSL v spojitosti s XML webovými službami patrí:
- SSL predstavuje tzv. end - to - end zabezpečenie komunikácie. Pokrytý je len odosielateľ a príjemca správy. Pre XML webové služby je nutné zabezpečiť komunikáciu medzi každými dvoma uzlami komunikácie, ide o tzv. point – to – point zabezpečenia.
- SSL predstavuje zabezpečenie komunikácie iba na transporte. Pre webové služby je vhodnejšie zabezpečenie na úrovni správ. SSL je závislé na HTTP protokole.
- SSL šifruje celú komunikáciu, neumožňuje selektívne šifrovanie a takisto nepodporuje v plnej miere mechanizmus nepopierateľnosti. Pre webové služby, ktoré sú súčasťou SOA, je selektívne šifrovanie nutnou podmienkou.
Advanced Encryption Standard
Pri počiatočnej výmene konfiguračného XML dokumentu je využitá asymetrická šifra RSA s využitím kľúčov z certifikátov webovej služby a klienta. Ďalšia komunikácia je šifrovaná pomocou symetrického šifrovacieho algoritmu. Ako šifrovací algoritmus sme zvolili symetrický blokový algoritmus Rijndael, ktorý bol v roku 1997 vyhlásený americkým úradom pre štandardizáciu (NIST) ako štandard. Dodnes nie sú známe dôkazy o jeho prelomení. [23]
AES predstavuje blokový šifrovací algoritmus so šírkou bloku 128 bitov a možnými dĺžkami kľúčov 128, 192 a 256. Rijndael podporuje aj voliteľné väčšie dátové bloky a kľúče v 32- bitových prírastkoch, ale tie nie sú zahrnuté v špecifikácii štandardu AES. [22]
Trieda SecureExtensionUtilities
Ako už bolo spomenuté, SOAP správy sú šifrované pomocou symetrickej šifry Rijndael, ktoré časti SOAP správy budú šifrované, je určené pomocou atribútov SOAP rozšírenia. Trieda SecureExtensionUtilities zabezpečuje šifrovanie, dešifrovanie, digitálne podpisovanie a verifikáciu digitálneho podpisu SOAP správ.
SecureExtensionUtilities implementuje v sebe dve hlavné verejné metódy:
- InSoap,
- OutSoap,
a tieto pomocné privátne metódy:
- DecryptString, metóda dešifruje textový reťazec z XML dokumentu.
- DecryptSoap, dešifruje XML dokument.
- VerifySignedSoap, overuje digitálny podpis SOAP správy.
- SingSoap, digitálne podpisuje SOAP správu na základe štandardu XML Signature.
- EncryptString, metóda šifruje textový reťazec z XML dokumentu.
- EncryptSoap, šifruje XML dokument.
Metóda InSoap spracováva stream SOAP požiadavky od klienta. Táto metóda je volaná v etape BeforeDeserialize metódy ProcessMessage. Ako vstupné parametre akceptuje:
- string[] soapElement určuje, ktoré elementy SOAP správy budú šifrované.
- Stream inputStream predstavuje raw SOAP správu.
- User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta.
Ak nie je SOAP správa šifrovaná, metóda InSoap vráti ASP.NET vstupný SOAP prúd. Celý proces spracovania je znázornený na Obr. 9.3. Pokiaľ príde k zmene SOAP správy počas prenosu cez HTTP kanál, čiže overenie digitálneho podpisu SOAP správy indikuje sfalšovanie alebo podvrhnutie, klient je upozornený a nepríde k spracovaniu SOAP správy, či už na strane webovej služby, alebo na strane klientskej aplikácie.
Overovanie digitálneho podpisu na strane klienta je realizované obdobným spôsobom, rozdiel je v tom, že podpisovanie SOAP správ realizuje objekt proxy, v ktorom je implementované samotné SOAP rozšírenie. Na overovanie je použitý verejný kľúč zo serverového certifikátu webovej služby. Úlohou metódy InSoap je teda dešifrovať SOAP správu a overiť jej digitálny podpis.
Metóda OutSoap spracováva stream SOAP odpovede zasielaného na klienta. Táto metóda je volaná v etape AfterSerialize metódy ProcessMessage. Metóda OutSoap ako vstupné parametre akceptuje:
- string[] soapElement určuje, ktoré elementy SOAP správy budú šifrované.
- Stream inputStream predstavuje raw SOAP správu.
- User user, trieda User predstavuje dátový objekt obsahujúci AES parametre a verejný kľúč klienta.
- X509Certificate2 webServiceCert, objekt typu X509Certificate2 predstavuje serverový certifikát so súkromným kľúčom, ktorý sa použije na digitálne podpísanie SOAP správy.
Úlohou tejto metódy je digitálne podpísať a zašifrovať SOAP správu. Každá zašifrovaná SOAP správa od klienta má v SOAP hlavičke umiestnený dodatočný element IsEncrypted, ktorý slúži na identifikáciu, či je daná SOAP správa zašifrovaná. V Tab. 9.8 je ukážka zašifrovania SOAP správy
Tab. 9.8 Ukážka zašifrovanie SOAP správy<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header>
<TicketHeader xmlns="http://tempuri.org/">
<Ticket>2541a182-8f4f-46c3-84f7-e667c221f494</Ticket>
</TicketHeader>
<IsEncrypted />
</soap:Header>
<soap:Body>
<SseReadPatient xmlns="http://tempuri.org/">
<id>Wk/C7PGSj/+fg2jQhQlUyg==</id>
</SseReadPatient>
</soap:Body>
<</soap:Envelope>
|
Digitálne podpisovanie SOAP správ je realizované prostredníctvom štandardu XML Signature, ktorý sme si popísali v podkapitole 8.1. SOAP správy sú podpisované na strane servera prostredníctvom súkromného kľúča zo serverového certifikátu. Na strane klienta je digitálne podpisovanie realizované prostredníctvom súkromného kľúča z klientskeho certifikátu. V Tab. 9.9 je ukážka podpísanej SOAP správy.
Digitálne podpisovanie na strane klienta je realizované obdobným spôsobom, rozdiel je v tom že podpisovanie SOAP správ realizuje objekt proxy, v ktorom je implementované samotné SOAP rozšírenie. Na podpísanie SOAP správy je použitý súkromný kľúč z klientskeho certifikátu.
<soap:Envelope:xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
</soap:Body>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>2yfAuq6taP4kPBsFEM+J79F7ysM=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>r2NmZyXtsku0WfbAJ4Kej/Kx0W0hAYCGAq7ltU7P5EN/NfQLYtZBCr97KHqNHkrEOqnU8Freg6
hEg1LXBhrkmF86bOApHTfOrdzpeK1WjK/tKO2G+xigjD8/PBhQszRK/qfG54gdY3kJ/y/kmn/S
F+W49scLowecDxxeIx29UeI3m4yF8GoDGL3xjB/sEN78u8owdaBVcwkH2jIHWz6CiwPHk7YNLF
c/Q0/XqE/ieBnAB2i0gLbM377AdHr9qLwMHVG/M9RVyl0JkWnUI8Viwm3Y268xz7cNlTnfa3uT
hOGHMgmVDrBboHL44zZIBAZbsNsbqSPEipTMDVc7efC0Vg==
</SignatureValue>
</Signature>
</soap:Envelope>
|
Pri digitálnom podpisovaní sme použili kanonizačný algoritmus na element <SignedInfo>. Použitie je indikované prostredníctvom elementu CanonicalizationMethodAlgorithm. Je to z toho dôvodu, aby sme zabránili rozdielnym výsledkom pri overovaní digitálneho podpisu. Nakoľko textová reprezentácia XML môže byť spracovaná rozdielne v závislosti použitého dátového prúdu (prázdne tagy, white space, komentáre...), kanonizácia definuje presnú fyzickú štruktúru dokumentu.
Tab. 9.10 Zoznam algoritmom použitých pri digitálnom podpisovaní SOAPAlgoritmus | Popis |
SHA1 | Hašovací algoritmus použitý pri výpočte hašu. |
RSA | Kryptografický algoritmus použitý na vytvorenie digitálneho podpisu. |
REC | Kanonizačný algoritmus. |
V tejto podkapitole sme si popísali štruktúru triedy SecureExtensionUtilities, vysvetlili sme si akým spôsobom je spracovaný SOAP stream z triedy SOAP rozšírenia, a taktiež digitálne podpisovanie, verifikáciu, šifrovanie a dešifrovanie SOAP správ.
Autorizácia v SOAP Security Enhancement
Selektívne šifrovanie a digitálne podpisovanie má ochrániť samotnú komunikáciu medzi webovou službou a jej klientom. Úlohou autorizácie je rozhodnúť, aké operácie bude môcť autentifikovaný užívateľ vykonávať a k akým zdrojom bude mať prístup na strane webovej služby. Pri vytváraní autorizačných pravidiel sme mali tieto možnosti:
- Vytvoriť autorizačné pravidlá v konfiguračnom súbore webovej služby. Týmto spôsobom sme sa zaoberali v podkapitole 6.1.
- Namapovať klientske certifikáty na užívateľské účty systému Windows prostredníctvom IIS.
- Použiť niektorý zo spôsobov impersonácie, ktorými sme sa zaoberali v podkapitole 5.2.1.
Použitie autorizačných pravidiel v súbore web.config je relatívne flexibilný spôsob autorizácie, ale neposkytuje také pokročilé možnosti ako impersonácia. Rozhodli sme sa použiť programovú impersonáciu, a to z nasledujúcich dôvodov :
- Umožňuje mapovanie klientskych certifikátov na užívateľské účty systému dvoma rôznymi spôsobmi :
- One – to – one,
- Many – to – one.
- Programová impersonácia nám umožní flexibilne nastaviť, ktorá časť programového kódu bude vykonávaná pod účtom Network Service a ktorá pod nami zvoleným užívateľským účtom. Tento spôsob sa prostredníctvom mapovania klientskych certifikátov na IIS nedá docieliť.
Proces programovej impersonácie je nasledovný :
- V databáze je priradený ku každému klientskemu certifikátu jeden užívateľský účet systému Windows.
- Pri úspešnej počiatočnej autentifikácii klienta prostredníctvom certifikátu, sa jeho autentifikačný lístok namapuje na užívateľský účet.
Programová impersonácia je vykonávaná triedou UserImpersonation, ktorá obsahuje tieto metódy :
- Login - získa príznak účtu užívateľa Windows.
- Impersonate - spustí proces vykonávania programového kódu v kontexte identity užívateľského účtu. Pokiaľ klientov autentifikačný lístok nie je namapovaný na užívateľský účet, programový kód bude vykonávaný pod účtom Network Service, ktorý predstavuje prednastavený účet pre spracovanie ASPNET na systéme Windows Server 2003.
- UndoImpersonate - ukončí impersonáciu programového kódu.
Prostredníctvom užívateľských účtov Windows môžeme jednotlivým klientom webovej služby vyčleniť prístup k súborom na disku, k databáze a pod. Použitie triedy UserImpersonate je znázornené v Tab. 9.11.
Tab. 9.11 Použitie triedy UserImpersonateUserImpersonation _objImp = new UserImpersonation();
_objImp.ReadUserAccount(Ticket.Ticket);
_objImp.Login();
_objImp.Impersonate();
//programový kód, ktorý ma byť vykonáný pod inou identitou
_objImp.UndoImpesonate();
|
Výhody SOAP Security Enhancement pre ASP.NET webové služby
V minulosti sa na zabezpečenie ASP.NET webových služieb využívalo rozšírenie Web Services Enhancements (WSE) [25], [26], [27]. Súčasná verzia 3.0 nepodporuje ASP.NET webové služby. Preto je veľmi ťažké porovnať navrhovanú vlastnú bezpečnostnú platformu s nejakým oficiálnym spôsobom zabezpečenia. Jediným možným riešením bolo porovnať spôsob zabezpečenia s rozšírením WSE 2.0. Tento produkt mal veľmi veľa problémov v oblasti interoperability a takisto je zastaralý. Preto sme sa vyhli porovnaniu našej bezpečnostnej platformy s týmto rozšírením.
- Naša bezpečnostná platforma poskytuje zabezpečenie na úrovni aplikácie a taktiež na úrovni správ. Poskytuje dva spôsoby autentifikácie :
- Počiatočnú autentifikáciu založenú na certifikátoch X509. Výhodou tohto spôsobu autentifikácie je dobrá kontrola nad užívateľskými identitami.
- Autentifikáciu založenú na autentifikačných lístkoch v SOAP hlavičke. Výhodou tohto spôsobu autentifikácie je :
- Výhoda vytvorenia SOAP hlavičky je tá, že objekt proxy ju na strane klienta automaticky udržuje. Pokiaľ klient používa rovnakú inštanciu triedy proxy, bude automaticky a pri ďalšom odosielaní SOAP správ na webovú službu posielaný aj autentifikačný lístok v SOAP hlavičke.
- Pri opätovnom volaní webových metód nemusí byť posielaný s požiadavkou aplikácie aj klientsky certifikát. Vďaka tomu nemusí byť opätovne použité aj HTTPS spojenie.
- Autentifikačný lístok môže byť aplikácii vydaný s určitou časovou platnosťou, čo zvyšuje flexibilitu systému.
Integrita komunikácie je zabezpečená prostredníctvom digitálneho podpisovania na základe štandardu XML Signature. SOAP správy sú podpisované na základe privátnych kľúčov z certifikátov a overované na základe verejných kľúčov z certifikátov. Pokiaľ príde k zmene SOAP správy počas transferu cez HTTP kanál, čiže overenie digitálneho podpisu SOAP správy indikuje sfalšovanie alebo podvrhnutie, klient je upozornený a nepríde k spracovaniu SOAP správy, či už na strane webovej služby, alebo na strane klientskej aplikácie
Dôvernosť komunikácie je založená na šifrovaní SOAP správ pomocou symetrického blokového algoritmu Rijndael. Výhody:
- SOAP správy sú selektívne šifrované, chránené sú len potrebné dáta. Selektívne šifrovanie je nevyhnutná podmienka začlenenia XML webových služieb do SOA.
- Výhodou voči štandardu XML Encryption je ten, že pri našom šifrovaní nedochádza k „deformácii" XML tagov.
- Šifrovací algoritmus môže byť upravený podľa potreby praxe.
- Šifrovanie je realizované prostredníctvom SOAP rozšírenia. To znamená, že šifruje už serializované dáta. Vďaka tomu môžeme šifrovať a digitálne podpisovať aj vlastné dátové typy.
- Oproti technológii SSL predstavuje náš spôsob zabezpečenia point to point, čo je ďalšia podmienka začlenenia XML webových služieb do SOA.
Veľkú výhodu nášho zabezpečenia vidíme v spôsobe jeho samotného použitia. Celý mechanizmus ochrany SOAP správ sa aplikuje na webovú metódu prostredníctvom atribútu SOAP rozšírenia, ktorý predstavuje len dopísanie jedného riadku kódu nad webovú metódu. Náš spôsob zabezpečenia nemení spracovanie programového kódu webovej metódy.
V Tab. 9.12 je ukážka nastavenia šifrovania elementu body SOAP správy zasielanej ako odpoveď na klientsku aplikáciu. Elementy SOAP správy, ktoré majú byť zašifrované sa zadefinujú prostredníctvom Xpath výrazu pomocou vlastnosti SoapElement triedy atribútu SOAP rozšírenia.
Tab. 9.12 Použitie atribútu SOAP rozšírenia[WebMethod]
[SecureExtension(SoapElement = "//soap:Body/*/*")]
public DataSet GetDataSet()
{
//kód webovej metódy
}
|
Záver
V práci sme opísali technologické pozadie XML webových služieb a ich štandardy. Zamerali sme sa na ASP.NET webové služby. Vysvetlili sme si spôsoby, akým môžeme vytvoriť bezpečnostný komunikačný scenár medzi webovou službou a jej klientom. Rozobrali sme jednotlivé možnosti autentifikácie, autorizácie klientov webovej služby, spôsoby na zabezpečenie dôvernosti a integrity komunikácie. Uviedli sme ich výhody a nevýhody, ktoré so sebou prinášajú.
Upozornili sme na hlavné chyby, ktoré vznikajú pri zabezpečovaní XML webových služieb. Ide hlavne o použitie technológie SSL a štandardu XML Encryption. Samotná technológia SSL nie je postačujúca na zabezpečenie komunikácie medzi webovou službou a jej klientom, nakoľko predstavuje zabezpečenie na úrovni komunikačného kanála a predstavuje tzv. end – to – end zabezpečenie. To nie je veľmi vhodné pre XML webové služby, kedže v praxi bývajú súčasťou SOA. SOA architektúra vyžaduje selektívne šifrovanie, ktoré nie je možné dosiahnuť so štandardom XML Encryption. Pri použití tohto štandardu dochádza taktiež k deformácii XML tagov. Cieľom bezpečnostnej platformy bolo odstránenie týchto nedostatkov. Bezpečnostná platforma predstavuje zabezpečenie na úrovni aplikácie a tiež na úrovni správ. Počiatočná autentifikácia je realizovaná na základe certifikátov X509, pri volaní ďalších webových metód je klient autentifikovaný na základe autentifikačného lístka v SOAP hlavičke. Dĺžka platnosti autentifikačného lístka sa dá flexibilne meniť podľa potreby. SOAP správy sú selektívne šifrované pomocou AES, tým je dosiahnuté utajenie komunikácie. Integrita je zabezpečená prostredníctvom digitálneho podpisovania SOAP správ. Naša bezpečnostná platforma poskytuje autorizačný mechanizmus prostredníctvom programovej impersonácie.
Na otestovanie funkčnosti zabezpečenia komunikácie XML ASP.NET webovej služby bola vytvorená WinForms klientska aplikácia.
Použitá literatúra
- MacDonald, Matthew., Beginning ASP.NET 3.5 in C# 2008: From Novice to Professional, Apress, 2007. ISBN 978-1590598917
- Troelsen, Andrew., Pro C# 2008 and the .NET 3.5 Platform, Apress, 2007. ISBN 978-1590598849
- Glynn, Jay., Skinner, Morgan., Professional C# 2008, Wrox, 2008. ISBN 978-0470191378
- MacDonald, Matthew., Szpuszta, Mario., Pro ASP.NET 2.0 in C# 2005, Apress, 2005. ISBN 978-1590594964
- Foggon, Damien., Maharry, Daniel., Ullman, Chris., Watson, Karli., Programming Microsoft .NET XML Web Services, Microsoft Press, 2003. ISBN 978-0735619128
- Jones, Allen ., Microsoft .NET XML Web Services Step by Step, Microsoft Press, 2002. ISBN13: 978-0735617209
- Eide, Andreas., Miller, Chris., Sempf, Bill Sempf., Professional ASP.NET Web Services, Wrox Press, 2001. ISBN 978-1861005458
- Kurt, Chris., Web Services Architecture and Its Specifications: Essentials for Understanding WS, Microsoft Press, 2005. ISBN 978-0735621626
- Krowczyk, Andrew., Greenvoss, Zach., Banerjee. Ashish., Professional C# Web Services: Building .NET Web Services with ASP.NET and .NET Remoting, Wrox Press, 2001. ISBN 978-1861004390
- www.w3.org [online]. last updated: 2007-06-05 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/TR/soap/>
- www.w3.org [online]. last updated: 2001-03-14 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/TR/wsdl/>
- www.oasis-open.org [online]. last updated: 2009-12-19 [cit. 2009-12-19]. Dostupná z WWW: < http://www.oasis-open.org/committees/uddi-spec/doc/tcspecs.htm>
- O'Neill, Mark., Web Services Security, McGraw-Hill Osborne Media, 2003. ISBN 978-0072224719
- Hartman, Bret., Flinn, Donald., Beznosov, Konstantin. Mastering Web Services Security, 2003. ISBN 978-0471267164
- Nantz, Brian., Expert Web Services Security in the .NET Platform, Apress, 2004. ISBN 978-1590591154
- Microsoft, Vytváříme zabezpečené aplikace v Microsoft ASP.NET, Computer Press, 2004. ISBN 80-251-0466-4
- www.w3.org [online]. last updated: 2008-06-10 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/TR/xmldsig-core/ >
- www.w3.org [online]. last updated: 2002-12-13 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/TR/xmlenc-core/ >
- www.w3.org [online]. last updated: 2004-03-26 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/MarkUp/SGML/>
- www.oasis-open.org [online]. last updated: 2009-12-19 [cit. 2009-12-19]. Dostupná z WWW: < http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml>
- www.w3.org [online]. last updated: 2005-12-20 [cit. 2009-12-19]. Dostupná z WWW: < http://www.w3.org/TR/XMKS/ >
- Rijmen, Vincent., The Design of Rijndael: AES - The Advanced Encryption Standard, Springer, 2002. ISBN 978-3540425809
- Tom, Denis., Cryptography for Developers, Syngress, 2007. ISBN 978-1597491044
- www.msdn.microsoft.com [online]. last updated : 2009-12-22 [cit. 2009-12-22]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/system.security.cryptography.passwordderivebytes.aspx
- Microsoft Corporation, Web Service Security: Scenarios, Patterns, and Implementation Guidance for Web Services Enhancements (WSE) 3.0, Microsoft Press, 2006. ISBN 978-0735623149
- Hasan, Jeffrey., Expert Service-Oriented Architecture in C#: Using the Web Services Enhancements 2.0, Apress, 2004. ISBN 978-1590593905
- Evjen, Bill., Web Services Enhancements: Understanding the WSE for .NET Enterprise Applications, Wiley, 2003. ISBN 978-0764537363
- www.msdn.microsoft.com [online]. last updated : 2009-12-22 [cit. 2009-12-22]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/system.security.cryptography.passwordderivebytes.aspx
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/72wdk8cc(VS.71).aspx
- http://www.oasis-open.org [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=xacml
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/ms229335.aspx
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/e80y5yhx%28VS.80%29.aspx
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/dd0w4a2z%28VS.80%29.aspx
- Dostálek, Libor., Vohnoutová, Marta., Velký průvodce infrastrukturou PKI a technologií elektronického podpisu, 2006. ISBN 80-251-0828-7
- www.msdn.microsoft.com [online]. last updated : 2010-01-07 [cit. 2010-01-07]. Dostupná z WWW: http://msdn.microsoft.com/en-us/library/cc488021.aspx