Sdílet prostřednictvím


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 pro zjišťování zabezpečením snižuje různé typy útoků (změna zpráv, odepření služby, opaková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 Discovery 2005 i verzi 1.1.

Vlastní komunikační kanál je přidán na vrchole existujícího zásobníku 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 pro zjišťování, který vytváří zabezpečené kanály. Zabezpečené kanály se aplikují a ověřují podpisy zpráv a jsou umístěny na vrcholu aktuálního zásobníku.

Element zabezpečené vazby vytváří továrny na zabezpečené kanály a posluchače kanálů.

Továrna 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 vzorek určuje rozšířené položky podpisu. Vytvoří se podpis XML (SignedInfo) s použitím ds předpony oboru názvů, jak to vyžaduje 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 digest 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 klíčový identifikátor podpisového tokenu a jedná se o identifikátor klíče subjektu (SKI) podpisového tokenu nebo (pokud SKI neexistuje) hodnotu heš SHA-1 veřejného klíče podpisového tokenu.

Zabezpečený posluchač kanálu

Naslouchací zařízení 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 se KeyId uvedené 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 pro zjišťování. Tyto zabezpečené koncové body lze použít pro posluchače oznámení o zjišťování a služby, které lze zjistit.

Ukázkové podrobnosti

Ukázka obsahuje knihovnu a 4 konzolové aplikace:

  • DiscoverySecurityChannels: Knihovna, která umožňuje přístup k zabezpečené vazbě. 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 pokouší zjistit ICalculatorService a volat metody této služby. Znovu je sestavena UdpDiscoveryEndpoint s přidaným zabezpečením a používá se k podepisování a ověřování zpráv.

  • 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 Setup.bat měly být zrušeny a Cleanup.bat by měly být spuštěny, protože duplicitní položky 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ůstanou žádné certifikáty.

Použití této ukázky

  1. 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.

  2. 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ě.

  3. Po dokončení ukázky spusťte Cleanup.bat skript, který odebere certifikáty vytvořené pro tuto ukázku.