Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Identifieringsspecifikationen kräver inte att slutpunkterna som deltar i identifieringsprocessen är säkra. Genom att förbättra identifieringsmeddelandena med säkerhet minimeras olika typer av attacker (meddelandeändring, doshantering, återuppspelning, förfalskning).
DiscoveryScenario-exemplet implementerar anpassade kanaler som beräknar och verifierar meddelandesignaturer med hjälp av det kompakta signaturformatet (beskrivs i avsnitt 8.2 i WS-Discovery-specifikationen). Exemplet stöder både 2005 Discovery-specifikationen och 1.1-versionen.
Den anpassade kanalen tillämpas på den befintliga kanalstacken för slutpunkter för upptäckt och tillkännagivande. På så sätt tillämpas en signaturrubrik för varje meddelande som skickas. Signaturen verifieras på mottagna meddelanden och när den inte matchar eller när meddelandena inte har en signatur tas meddelandena bort. För att signera och verifiera meddelanden använder exemplet certifikat.
Diskussion
WCF är utökningsbar och ger användarna möjlighet att anpassa kanaler efter behov. Exemplet implementerar ett identifieringssäkert bindningselement som skapar säkra kanaler. De säkra kanalerna används för att tillämpa och verifiera meddelandesignaturer, och de appliceras ovanpå den aktuella stacken.
Det säkra bindningselementet skapar säkra kanalfabriker och kanallyssnare.
Säker kanalfabrik
Den säkra kanalfabriken skapar utdata- eller duplexkanaler som lägger till en kompakt signatur i meddelandehuvuden. För att hålla meddelanden så små som möjligt används formatet för kompakt signatur. Strukturen för en kompakt signatur visas i följande exempel.
<d:Security ... >
  [<d:Sig Scheme="xs:anyURI"
         [KeyId="xs:base64Binary"]?
          Refs="..."
         [PrefixList]="xs:NMTOKENS"
          Sig="xs:base64Binary"
          ... />]?
  ...
</d:Security>
Anmärkning
              PrefixList lades till i 2008 Discovery versionsprotokoll.
För att beräkna signaturen avgör exemplet de expanderade signaturobjekten. En XML-signatur (SignedInfo) skapas med hjälp av ds namnområdesprefixet enligt WS-Discovery-specifikationen. Brödtexten och alla rubriker i namnrymder för identifiering och adressering refereras till i signaturen, så de kan inte manipuleras. Varje refererat element transformeras med hjälp av den exklusiva kanonikaliseringen (http://www.w3.org/2001/10/xml-exc-c14n#) och sedan beräknas ett SHA-1-sammandragsvärde (http://www.w3.org/2000/09/xmldsig#sha1). Baserat på alla refererade element och deras sammandragsvärden beräknas signaturvärdet med hjälp av RSA-algoritmen (http://www.w3.org/2000/09/xmldsig#rsa-sha1).
Meddelandena signeras med ett klient angivet certifikat. Butiksplatsen, namnet och certifikatets ämnesnamn måste anges när bindningselementet skapas. I KeyId den kompakta signaturen är nyckelidentifierare för signeringstoken och motsvarar Subject Key Identifier (SKI) för signeringstoken eller (om SKI inte finns) en SHA-1-hash av den offentliga nyckeln för signeringstoken.
Säker kanallyssnare
Den säkra kanallyssnaren skapar indata- eller duplexkanaler som verifierar den kompakta signaturen i mottagna meddelanden. För att verifiera signaturen används den KeyId som anges i den kompakta signatur som är kopplad till meddelandet för att välja ett certifikat från det angivna lagret. Om meddelandet inte har någon signatur eller om signaturkontrollen misslyckas tas meddelandena bort. Om du vill använda den säkra bindningen definierar exemplet en fabrik som skapar anpassade UdpDiscoveryEndpoint och UdpAnnouncementEndpoint med det tillagda bindningselementet för säker upptäckt. Dessa säkra slutpunkter kan användas i lyssnare för upptäcktsmeddelanden och upptäckbara tjänster.
Exempelinformation
Exemplet innehåller ett bibliotek och fyra konsolprogram:
DiscoverySecurityChannels: Ett bibliotek som exponerar den säkra bindningen. Biblioteket beräknar och verifierar den kompakta signaturen för utgående/inkommande meddelanden.
Tjänst: En tjänst som exponerar ICalculatorService-kontraktet, självhostad. Tjänsten är markerad som Upptäckbar. Användaren anger information om certifikatet som används för att signera meddelanden genom att ange lagringsplats och namn och ämnesnamn eller annan unik identifierare för certifikatet, och det arkiv där klientcertifikaten finns (de certifikat som används för att kontrollera signaturen för inkommande meddelanden). Baserat på den här informationen skapas och används en UdpDiscoveryEndpoint med extra säkerhet.
Klient: Den här klassen försöker identifiera en ICalculatorService och anropa metoder för tjänsten. Återigen skapas en UdpDiscoveryEndpoint med extra säkerhet och används för att signera och verifiera meddelandena.
AnnouncementListener: En självhostad tjänst som lyssnar efter online- och offlineannonser och använder den säkra slutpunkten för annonsering.
Anmärkning
Om Setup.bat körs flera gånger uppmanar certifikathanteraren dig att välja ett certifikat att lägga till, eftersom det finns duplicerade certifikat. I så fall bör Setup.bat avbrytas och Cleanup.bat anropas eftersom dubbletter redan har skapats. Cleanup.bat uppmanar dig också att välja ett certifikat att ta bort. Välj ett certifikat i listan och fortsätt att köra Cleanup.bat tills inga certifikat finns kvar.
Så här använder du det här exemplet
Kör skriptet Setup.bat från Visual Studio Developer Command Prompt. Exemplet använder certifikat för att signera och verifiera meddelanden. Skriptet skapar certifikaten med hjälp av Makecert.exe och installerar dem sedan med hjälp av Certmgr.exe. Skriptet måste köras med administratörsbehörighet.
Om du vill skapa och köra exemplet öppnar du filen Security.sln i Visual Studio och väljer Återskapa alla. Uppdatera lösningsegenskaperna för att starta flera projekt: välj Start för alla projekt utom DiscoverySecureChannels. Kör lösningen normalt.
När du är klar med exemplet kör du skriptet Cleanup.bat som tar bort certifikaten som skapats för det här exemplet.