Zabezpečení přenosu HTTP

Při použití protokolu HTTP jako přenosu poskytuje zabezpečení implementace SSL (Secure Sockets Layer). Protokol SSL se široce používá na internetu k ověření služby klientovi a k zajištění důvěrnosti (šifrování) kanálu. Tento článek vysvětluje, jak funguje PROTOKOL SSL a jak je implementovaný ve Windows Communication Foundation (WCF).

Základní SSL

Jak funguje SSL, je nejlépe vysvětleno prostřednictvím typického scénáře, v tomto případě webu banky. Web umožňuje zákazníkovi přihlásit se pomocí uživatelského jména a hesla. Po ověření může uživatel provádět transakce, jako je zobrazení zůstatků účtu, plateb faktur a přesun peněz z jednoho účtu do druhého.

Když uživatel poprvé navštíví web, zahájí mechanismus SSL řadu jednání, označovaný jako handshake, s klientem uživatele (v tomto případě webový prohlížeč). Protokol SSL nejprve ověří bankovní web pro zákazníka. Jedná se o zásadní krok, protože zákazníci musí nejprve vědět, že komunikují se skutečným webem, a ne s falšováním, který se je pokusí nalákat, aby zadali uživatelské jméno a heslo. Ssl toto ověřování zajišťuje pomocí certifikátu SSL poskytnutého důvěryhodnou autoritou, jako je VeriSign. Logika vypadá takto: VeriSign ručí za identitu bankovních stránek. Vzhledem k tomu, že prohlížeč důvěřuje VeriSign, web je důvěryhodný. Chcete-li se podívat na VeriSign, můžete to provést také kliknutím na logo VeriSign. To představuje prohlášení pravosti s datem vypršení platnosti a osobou, které je vydáno (bankovnímu místu).

Aby bylo možné zahájit zabezpečenou relaci, klient odešle na server ekvivalent "hello" spolu se seznamem kryptografických algoritmů, které může použít k podepisování, generování hodnot hash a šifrování a dešifrování. V reakci odešle web zpět potvrzení a jeho volbu některého z sad algoritmů. Během tohoto počátečního handshake obě strany posílají a přijímají nonce. Nonce je náhodně generovaný datový prvek, který se používá v kombinaci s veřejným klíčem webové stránky k vytvoření hodnoty hash. Hodnota hash je nové číslo odvozené ze dvou čísel pomocí standardního algoritmu, například SHA1. (Klient a lokalita také vyměňují zprávy, aby souhlasily s tím, který hashovací algoritmus se má použít.) Hodnota hash je jedinečná a používá se pouze pro relaci mezi klientem a lokalitou k šifrování a dešifrování zpráv. Jak klient, tak i služba mají původní nonce a veřejný klíč certifikátu, takže obě strany mohou vygenerovat stejnou hash hodnotu. Klient proto ověří hodnotu hash odeslanou službou pomocí (a) pomocí schváleného algoritmu k výpočtu hodnoty hash z dat a (b) porovnání s hodnotou hash odeslanou službou; pokud se oba shodují, pak má klient jistotu, že hodnota hash nebyla manipulována. Klient pak může tuto hodnotu hash použít jako klíč k zašifrování zprávy, která obsahuje další novou hodnotu hash. Služba může zprávu dešifrovat pomocí hodnoty hash a obnovit tuto druhou až konečnou hodnotu hash. Shromážděné informace (neces, veřejný klíč a další data) jsou nyní známé oběma stranám a je možné vytvořit konečnou hodnotu hash (nebo hlavní klíč). Tento konečný klíč se odešle zašifrovaný pomocí předposledního hashe. Hlavní klíč se pak použije k šifrování a dešifrování zpráv pro zbytek relace. Vzhledem k tomu, že klient i služba používají stejný klíč, označuje se také jako klíč relace.

Klíč relace je také známý jako symetrický klíč nebo „sdílené tajemství“. Mít symetrický klíč je důležité, protože snižuje výpočetní zátěž obou stran transakce. Pokud by každá zpráva požadovala novou výměnu hodnot nonce a hash, výkon by se zhoršil. Konečným cílem SSL je proto použít symetrický klíč, který umožňuje volně proudit zprávy mezi oběma stranami s větším stupněm zabezpečení a efektivity.

Předchozí popis je zjednodušená verze toho, co se stane, protože protokol se může lišit od webu po lokalitu. Je také možné, že klient i stránka oba generují nonce, které jsou algoritmicky kombinovány během procesu handshake, aby se při procesu výměny dat přidala větší složitost, a tím ochranu.

Certifikáty a infrastruktura veřejných klíčů

Během metody handshake služba také odešle klientovi certifikát SSL. Certifikát obsahuje informace, jako je datum vypršení platnosti, vydávající autorita a identifikátor URI (Uniform Resource Identifier) webu. Klient porovná identifikátor URI s identifikátorem URI, který původně kontaktoval, aby se ujistil o jejich shodě, a také zkontroluje datum a vydávající orgán.

Každý certifikát má dva klíče, privátní klíč a veřejný klíč a oba dva klíče se označují jako dvojice výměnných klíčů. Stručně řečeno, privátní klíč je známý pouze vlastníkovi certifikátu, zatímco veřejný klíč je čitelný z certifikátu. Klíč lze použít k šifrování nebo dešifrování výstupu, hashe nebo jiného klíče, ale vždy v opačné roli. Pokud například klient šifruje pomocí veřejného klíče, může zprávu dešifrovat pouze lokalita pomocí privátního klíče. Podobně platí, že pokud se lokalita šifruje pomocí privátního klíče, klient může dešifrovat pomocí veřejného klíče. To zajišťuje klientovi, že se zprávy vyměňují pouze s vlastníkem privátního klíče, protože pouze zprávy zašifrované pomocí privátního klíče je možné dešifrovat pomocí veřejného klíče. Stránka je ujištěna, že vyměňuje zprávy s klientem, který zašifroval pomocí veřejného klíče. Tato výměna je zabezpečená pouze pro počáteční handshake, což je důvod, proč se vynakládá mnohem více úsilí při vytváření skutečného symetrického klíče. Veškerá komunikace ale závisí na službě, která má platný certifikát SSL.

Implementace SSL pomocí WCF

Přenosové zabezpečení PROTOKOLU HTTP (nebo SSL) je poskytováno externě službě WCF. SSL můžete implementovat jedním ze dvou způsobů; rozhodovacím faktorem je hostovaná vaše aplikace:

  • Pokud jako hostitele WCF používáte internetovou informační službu (IIS), nastavte službu SSL pomocí infrastruktury služby IIS.

  • Pokud vytváříte aplikaci WCF v místním prostředí, můžete vytvořit vazbu certifikátu SSL na adresu pomocí nástroje HttpCfg.exe.

Použití služby IIS pro zabezpečení přenosu

IIS 7.0

Informace o nastavení služby IIS 7.0 jako zabezpečeného hostitele (pomocí PROTOKOLU SSL) najdete v tématu Konfigurace protokolu SECURE Sockets Layer ve službě IIS 7.0.

Pokud chcete nakonfigurovat certifikáty pro použití se službou IIS 7.0, přečtěte si téma Konfigurace certifikátů serveru ve službě IIS 7.0.

IIS 6.0

Informace o nastavení služby IIS 6.0 jako zabezpečeného hostitele (pomocí PROTOKOLU SSL) najdete v tématu Konfigurace protokolu Secure Sockets Layer.

Informace o konfiguraci certifikátů pro použití se službou IIS 6.0 najdete v tématu Certificates_IIS_SP1_Ops.

Použití httpCfg pro SSL

Pokud vytváříte aplikaci WCF v místním prostředí, použijte nástroj HttpCfg.exe .

Další informace o použití nástroje HttpCfg.exe k nastavení portu s certifikátem X.509 najdete v tématu Postupy: Konfigurace portu s certifikátem SSL.

Viz také