Ukázka zabezpečení zjišťování
Specifikace zjišťování nevyžaduje, aby koncové body, které se účastní procesu zjišťování, byly zabezpečené. Vylepšení zpráv zjišťování zabezpečením snižuje různé typy útoků (změna zpráv, odepření služby, přehrání, falšování identity).
Ukázka DiscoveryScenario implementuje vlastní kanály, které počítají a ověřují podpisy zpráv pomocí kompaktního formátu podpisu (popsaného v části 8.2 specifikace WS-Discovery). Ukázka podporuje specifikaci zjišťování 2005 i verzi 1.1.
Vlastní kanál se použije nad existujícím zásobníkem kanálů pro koncové body zjišťování a oznámení. Tímto způsobem se použije záhlaví podpisu pro každou odeslanou zprávu. Podpis se ověří u přijatých zpráv a když se neshoduje nebo když zprávy nemají podpis, zprávy se zahodí. K podepisování a ověřování zpráv používá ukázka certifikáty.
Diskuse
WCF je rozšiřitelný a umožňuje uživatelům přizpůsobit kanály podle potřeby. Ukázka implementuje prvek zabezpečené vazby zjišťování, který vytváří zabezpečené kanály. Zabezpečené kanály používají a ověřují podpisy zpráv a používají se nad aktuálním zásobníkem.
Element zabezpečené vazby vytváří objekty pro vytváření zabezpečených kanálů a naslouchací procesy kanálů.
Objekt pro vytváření zabezpečených kanálů
Objekt pro vytváření zabezpečených kanálů vytváří výstupní nebo duplexní kanály, které přidávají kompaktní podpis do záhlaví zpráv. Chcete-li zachovat co nejmenší počet zpráv, použije se kompaktní formát podpisu. Struktura kompaktního podpisu je znázorněna v následujícím příkladu.
<d:Security ... >
[<d:Sig Scheme="xs:anyURI"
[KeyId="xs:base64Binary"]?
Refs="..."
[PrefixList]="xs:NMTOKENS"
Sig="xs:base64Binary"
... />]?
...
</d:Security>
Poznámka:
Byla PrefixList
přidána do protokolu verze zjišťování 2008.
Pro výpočet podpisu ukázka určuje rozbalené položky podpisu. Vytvoří se podpis XML (SignedInfo
) s použitím ds
předpony oboru názvů podle specifikace WS-Discovery. Text a všechna záhlaví v oborech názvů zjišťování a adresování jsou odkazovány v podpisu, takže je nelze manipulovat. Každý odkazovaný prvek se transformuje pomocí exclusive Canonicalization (http://www.w3.org/2001/10/xml-exc-c14n#) a pak se vypočítá hodnota hash SHA-1 (http://www.w3.org/2000/09/xmldsig#sha1). Na základě všech odkazovaných prvků a jejich hodnot hash se hodnota podpisu vypočítá pomocí algoritmu RSA (http://www.w3.org/2000/09/xmldsig#rsa-sha1).
Zprávy jsou podepsané certifikátem zadaným klientem. Při vytváření elementu vazby musí být zadáno umístění úložiště, název a název subjektu certifikátu. V KeyId
kompaktním podpisu představuje identifikátor klíče podpisového tokenu a jedná se o identifikátor klíče subjektu (SKI) podpisového tokenu nebo (pokud ski neexistuje) hodnotu hash SHA-1 veřejného klíče podpisového tokenu.
Zabezpečený naslouchací proces kanálu
Naslouchací proces zabezpečeného kanálu vytvoří vstupní nebo duplexní kanály, které ověřují kompaktní podpis v přijatých zprávách. K ověření podpisu KeyId
se zadaný v kompaktním podpisu připojeném ke zprávě použije k výběru certifikátu ze zadaného úložiště. Pokud zpráva nemá podpis nebo kontrola podpisu selže, zprávy se zahodí. Pokud chcete použít zabezpečenou vazbu, ukázka definuje továrnu, která vytvoří vlastní UdpDiscoveryEndpoint a UdpAnnouncementEndpoint s přidaným prvkem zabezpečené vazby zjišťování. Tyto zabezpečené koncové body je možné použít v naslouchacích procesech oznámení zjišťování a zjistitelných službách.
Ukázkové podrobnosti
Ukázka obsahuje knihovnu a 4 konzolové aplikace:
DiscoverySecurityChannels: Knihovna, která zveřejňuje zabezpečenou vazbu. Knihovna vypočítá a ověří kompaktní podpis pro odchozí a příchozí zprávy.
Služba: Služba, která zobrazuje kontrakt ICalculatorService, v místním prostředí. Služba je označena jako zjistitelná. Uživatel určuje podrobnosti certifikátu použitého k podepisování zpráv zadáním umístění a názvu úložiště a názvu subjektu nebo jiného jedinečného identifikátoru certifikátu a úložiště, kde se nacházejí klientské certifikáty (certifikáty použité ke kontrole podpisu příchozích zpráv). Na základě těchto podrobností se sestaví a použije udpDiscoveryEndpoint s přidaným zabezpečením.
Klient: Tato třída se pokusí zjistit ICalculatorService a volat metody ve službě. Znovu se sestaví a použije se k podepsání a ověření zpráv s přidaným UdpDiscoveryEndpoint zabezpečením.
AnnouncementListener: Služba v místním prostředí, která naslouchá online a offline oznámením a používá koncový bod zabezpečeného oznámení.
Poznámka:
Pokud se Setup.bat spustí několikrát, správce certifikátů vás vyzve, abyste zvolili certifikát, který chcete přidat, protože existují duplicitní certifikáty. V takovém případě by se Setup.bat měly přerušit a Cleanup.bat by se měly volat, protože duplicity už byly vytvořeny. Cleanup.bat vás také vyzve k výběru certifikátu, který chcete odstranit. Ze seznamu vyberte certifikát a pokračujte v provádění Cleanup.bat, dokud nezůstane žádné certifikáty.
Použití této ukázky
Spusťte skript Setup.bat z příkazového řádku pro vývojáře pro Visual Studio. Ukázka používá certifikáty k podepisování a ověřování zpráv. Skript vytvoří certifikáty pomocí Makecert.exe a pak je nainstaluje pomocí Certmgr.exe. Skript musí být spuštěn s oprávněními správce.
Pokud chcete sestavit a spustit ukázku, otevřete soubor Security.sln v sadě Visual Studio a zvolte Znovu sestavit vše. Aktualizujte vlastnosti řešení tak, aby se spustilo více projektů: vyberte Spustit pro všechny projekty s výjimkou DiscoverySecureChannels. Spusťte řešení normálně.
Po dokončení ukázky spusťte Cleanup.bat skript, který odebere certifikáty vytvořené pro tuto ukázku.