Dela via


Exempel på identifieringssäkerhet

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 det kompakta signaturformatet (beskrivs i avsnitt 8.2 i WS-Discovery-specifikationen). Exemplet stöder både 2005 Discovery-specifikationenoch 1.1-versionen.

Den anpassade kanalen tillämpas ovanpå den befintliga kanalstacken för slutpunkter för identifiering och meddelanden. 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 tillämpar och verifierar meddelandesignaturer och tillämpas 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>

Kommentar

Lades PrefixList till i 2008 Discovery-versionsprotokollet.

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 representerar nyckelidentifieraren för signeringstoken och är certifikatnyckelidentifieraren (SKI) för signeringstoken eller (om SKI inte finns) en SHA-1-hash för 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 arkivet. 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 en anpassad UdpDiscoveryEndpoint och UdpAnnouncementEndpoint med det tillagda identifieringssäkerhetsbindningselementet. Dessa säkra slutpunkter kan användas i lyssnare av identifieringsmeddelanden och identifieringsbara 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-kontrakt, lokalt. Tjänsten är markerad som Identifieringsbar. 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 lokalt installerad tjänst som lyssnar efter online- och offlinemeddelanden och använder slutpunkten för säker meddelande.

Kommentar

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

  1. Kör Setup.bat skriptet från en kommandotolk för utvecklare för Visual Studio. 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.

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

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