Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Voor de detectiespecificatie is niet vereist dat eindpunten die deelnemen aan het detectieproces veilig zijn. Het verbeteren van de detectieberichten met beveiliging beperkt verschillende soorten aanvallen (berichtwijziging, Denial of Service, replay, adresvervalsing).
Het DiscoveryScenario-voorbeeld implementeert aangepaste kanalen waarmee berichthandtekeningen worden berekend en gecontroleerd met behulp van de compacte handtekeningindeling (beschreven in sectie 8.2 van de specificatie van de WS-Discovery). Het voorbeeld ondersteunt zowel de 2005 Discovery-specificatie als de versie 1.1.
Het aangepaste kanaal wordt toegepast op de bestaande kanaalstack voor detectie- en aankondigingseindpunten. Op deze manier wordt er een handtekeningkop toegepast voor elk verzonden bericht. De handtekening wordt gecontroleerd op ontvangen berichten en wanneer deze niet overeenkomt of wanneer de berichten geen handtekening hebben, worden de berichten verwijderd. Voor het ondertekenen en verifiëren van berichten gebruikt het voorbeeld certificaten.
Discussie
WCF is uitbreidbaar en stelt gebruikers in staat om kanalen naar wens aan te passen. In het voorbeeld wordt een beveiligd bindingselement voor detectie geïmplementeerd waarmee beveiligde kanalen worden gebouwd. De beveiligde kanalen zijn van toepassing op en verifiëren berichthandtekeningen en worden toegepast op de huidige stack.
Met het beveiligde bindingselement worden beveiligde kanaalfabrieken en kanaallisteners gebouwd.
Veilig Kanaalfabriek
De beveiligde kanaalfabriek creëert uitvoer- of duplexkanalen die een compacte handtekening aan berichtkoppen toevoegen. Om berichten zo klein mogelijk te houden, wordt de compacte handtekeningindeling gebruikt. De structuur van een compacte handtekening wordt weergegeven in het volgende voorbeeld.
<d:Security ... >
[<d:Sig Scheme="xs:anyURI"
[KeyId="xs:base64Binary"]?
Refs="..."
[PrefixList]="xs:NMTOKENS"
Sig="xs:base64Binary"
... />]?
...
</d:Security>
Opmerking
De PrefixList werd toegevoegd in het Discovery-protocol van 2008.
Om de handtekening te berekenen, bepaalt het voorbeeld de uitgebreide handtekeningitems. Een XML-handtekening (SignedInfo) wordt gemaakt met behulp van het ds-naamruimtevoorvoegsel, zoals vereist door de WS-Discovery-specificatie. De hoofdtekst en alle headers in detectie- en adresseringsnaamruimten worden in de handtekening verwezen, zodat ze niet kunnen worden gemanipuleerd. Elk element waarnaar wordt verwezen, wordt getransformeerd met behulp van de Exclusieve Canonicalization (http://www.w3.org/2001/10/xml-exc-c14n#) en vervolgens wordt een SHA-1-digestwaarde berekend (http://www.w3.org/2000/09/xmldsig#sha1). Op basis van alle elementen waarnaar wordt verwezen en de bijbehorende samenvattingswaarden, wordt de handtekeningwaarde berekend met behulp van het RSA-algoritme (http://www.w3.org/2000/09/xmldsig#rsa-sha1).
De berichten worden ondertekend met een door de client opgegeven certificaat. De opslaglocatie, naam en certificaatonderwerpnaam moeten worden opgegeven wanneer het bindingselement wordt gemaakt. De KeyId in de compacte handtekening vertegenwoordigt de sleutel-id van het ondertekeningstoken en is de Subject Key Identifier (SKI) van het ondertekeningstoken of (als de SKI niet bestaat) een SHA-1-hash van de openbare sleutel van het ondertekeningstoken.
Beveiligde Kanaal Luisteraar
De beveiligde kanaallistener maakt invoer- of duplexkanalen waarmee de compacte handtekening van ontvangen berichten wordt gecontroleerd. Als u de handtekening wilt verifiëren, wordt de compacte handtekeningsvorm KeyId die aan het bericht is gekoppeld, gebruikt om een certificaat in de opgegeven certificaatwinkel te selecteren. Als het bericht geen handtekening heeft of als de handtekeningcontrole mislukt, worden de berichten verwijderd. Om de beveiligde binding te gebruiken, definieert het voorbeeld een fabriek die aangepaste UdpDiscoveryEndpoint en UdpAnnouncementEndpoint maakt met het toegevoegde beveiligde bindingselement voor ontdekking. Deze beveiligde eindpunten kunnen worden gebruikt in ontdekkingsaankondigingsluisteraars en ontdekbare diensten.
Voorbeeldgegevens
Het voorbeeld bevat een bibliotheek en 4 consoletoepassingen:
DiscoverySecurityChannels: een bibliotheek die de beveiligde binding beschikbaar maakt. De bibliotheek berekent en verifieert de compacte handtekening voor uitgaande/binnenkomende berichten.
Service: Een service die het ICalculatorService-contract weergeeft, zelf-hostend. De dienst is gemarkeerd als Ontdekbaar. De gebruiker geeft de details op van het certificaat dat wordt gebruikt voor het ondertekenen van berichten door de opslaglocatie en naam en de onderwerpnaam of andere unieke id voor het certificaat op te geven, en het archief waar de clientcertificaten zich bevinden (de certificaten die worden gebruikt om de handtekening voor binnenkomende berichten te controleren). Op basis van deze details wordt een UdpDiscoveryEndpoint met extra beveiliging gebouwd en gebruikt.
Client: Deze klasse probeert een ICalculatorService te detecteren en methoden voor de service aan te roepen. Ook hier wordt een UdpDiscoveryEndpoint met extra beveiliging gebouwd en gebruikt om de berichten te ondertekenen en te verifiëren.
AnnouncementListener: een zelf-hostende service die luistert naar online- en offlineaankondigingen en het beveiligde aankondigingseindpunt gebruikt.
Opmerking
Als Setup.bat meerdere keren wordt uitgevoerd, vraagt de certificaatbeheerder u om een certificaat te kiezen dat u wilt toevoegen, omdat er dubbele certificaten zijn. In dat geval moet Setup.bat worden afgebroken en moet Cleanup.bat worden aangeroepen, omdat de duplicaten al zijn gemaakt. Cleanup.bat vraagt u ook om een certificaat te kiezen dat u wilt verwijderen. Selecteer een certificaat in de lijst en ga door met het uitvoeren van Cleanup.bat totdat er geen certificaten meer zijn.
Dit voorbeeld gebruiken
Voer het Setup.bat script uit vanuit een opdrachtprompt voor Ontwikkelaars voor Visual Studio. In het voorbeeld worden certificaten gebruikt om berichten te ondertekenen en te verifiëren. Het script maakt de certificaten met behulp van Makecert.exe en installeert deze vervolgens met behulp van Certmgr.exe. Het script moet worden uitgevoerd met beheerdersbevoegdheden.
Als u het voorbeeld wilt bouwen en uitvoeren, opent u het Security.sln-bestand in Visual Studio en kiest u Alles opnieuw opbouwen. Werk de oplossingseigenschappen bij om meerdere projecten te starten: selecteer Starten voor alle projecten behalve DiscoverySecureChannels. Voer de oplossing normaal uit.
Nadat u klaar bent met het voorbeeld, voert u het Cleanup.bat script uit waarmee de certificaten die voor dit voorbeeld zijn gemaakt, worden verwijderd.