Dela via


Säkerhet för distribuerade program

Säkerhet i Windows Communication Foundation (WCF) är indelat i tre viktiga funktionella områden: överföringssäkerhet, åtkomstkontroll och granskning. Överföringssäkerhet ger integritet, konfidentialitet och autentisering. Överföringssäkerhet tillhandahålls av något av följande: transportsäkerhet, meddelandesäkerhet eller TransportWithMessageCredential.

En översikt över WCF-meddelandesäkerhet finns i Säkerhetsöversikt. Mer information om de andra två delarna av WCF-säkerhet finns i Auktorisering och granskning.

Överföra säkerhetsscenarier

Vanliga scenarier som använder WCF-överföringssäkerhet är följande:

  • Säker överföring med Windows. En WCF-klient och -tjänst distribueras i en Windows-domän (eller i en Windows-skog). Meddelandena innehåller personuppgifter, så kraven omfattar ömsesidig autentisering av klienten och tjänsten, meddelandeintegritet och meddelandesekretess. Dessutom krävs bevis för att en viss transaktion har inträffat, till exempel att mottagaren av meddelandet ska registrera signaturinformationen.

  • Säker överföring med hjälp av UserName och HTTPS. En WCF-klient och -tjänst måste utvecklas för att fungera över hela Internet. Klientens autentiseringsuppgifter autentiseras mot en databas med användarnamn/lösenordspar. Tjänsten distribueras på en HTTPS-adress med hjälp av ett betrott SSL-certifikat (Secure Sockets Layer). Eftersom meddelandena överförs via Internet måste klienten och tjänsten autentiseras ömsesidigt och meddelandenas konfidentialitet och integritet måste bevaras under överföringen.

  • Säker överföring med hjälp av certifikat. En WCF-klient och -tjänst måste utvecklas för att fungera via det offentliga Internet. Både klienten och tjänsten har certifikat som kan användas för att skydda meddelandena. Klienten och tjänsten använder Internet för att kommunicera med varandra och för att utföra transaktioner med högt värde som kräver meddelandeintegritet, konfidentialitet och ömsesidig autentisering.

Integritet, konfidentialitet och autentisering

Tre funktioner – integritet, konfidentialitet och autentisering – kallas tillsammans för överföringssäkerhet. Överföringssäkerhet tillhandahåller de funktioner som hjälper till att minska hoten mot ett distribuerat program. I följande tabell beskrivs kortfattat de tre funktioner som utgör överföringssäkerhet.

Function beskrivning
Integritet Integritet är en försäkran om att data är fullständiga och korrekta, särskilt efter att de har passerat från en punkt till en annan och möjligen lästs av många aktörer. Integriteten måste upprätthållas för att förhindra manipulering av data och uppnås vanligtvis genom digital signering av ett meddelande.
Sekretess Konfidentialitet är försäkran om att ett meddelande inte har lästs av någon annan än den avsedda läsaren. Ett kreditkortsnummer måste till exempel hållas konfidentiellt eftersom det skickas via Internet. Konfidentialitet tillhandahålls ofta genom kryptering av data med hjälp av ett offentligt nyckel-/privat nyckelschema.
Autentisering Autentisering är verifieringen av en påstådd identitet. När du till exempel använder ett bankkonto är det absolut nödvändigt att endast den faktiska ägaren av kontot får ta ut pengar. Autentisering kan tillhandahållas på olika sätt. En vanlig metod är användar-/lösenordssystemet. En andra är användningen av ett X.509-certifikat som tillhandahålls av en tredje part.

Säkerhetslägen

WCF har flera lägen för överföringssäkerhet, som beskrivs i följande tabell.

Läge Description
None Ingen säkerhet anges i transportlagret eller på meddelandelagret. Ingen av de fördefinierade bindningarna använder det här läget som standard förutom <basicHttpBinding-elementet> eller, när du använder kod, BasicHttpBinding klassen.
Transport Använder en säker transport som HTTPS för integritet, konfidentialitet och ömsesidig autentisering.
Meddelande Använder SOAP-meddelandesäkerhet för integritet, konfidentialitet och ömsesidig autentisering. SOAP-meddelanden skyddas enligt WS-Security-standarderna.
Blandat läge Använder transportsäkerhet för integritet, konfidentialitet och serverautentisering. Använder meddelandesäkerhet (WS-Security och andra standarder) för klientautentisering.

(Den här uppräkningen för det här läget är TransportWithMessageCredential.)
Båda Utför skydd och autentisering på båda nivåerna. Det här läget är endast tillgängligt i netMsmqBinding-elementet>.<

Autentiseringsuppgifter och överföringssäkerhet

En autentiseringsuppgift är data som presenteras för att upprätta antingen en påstådd identitet eller funktioner. Att presentera en autentiseringsuppgift innebär att presentera både data och bevis på innehav av data. WCF stöder en mängd olika typer av autentiseringsuppgifter på både transport- och meddelandesäkerhetsnivå. Du kan ange en typ av autentiseringsuppgifter för en WCF-bindning.

I många länder eller regioner är ett körkort ett exempel på en autentiseringsuppgift. En licens innehåller data som representerar ens identitet och funktioner. Den innehåller bevis på innehav i form av innehavarens bild. Licensen utfärdas av en betrodd myndighet, vanligtvis en statlig licensieringsavdelning. Licensen är förseglad och kan innehålla ett hologram som visar att den inte har manipulerats eller förfalskats.

Du kan till exempel överväga två typer av autentiseringsuppgifter som stöds i WCF: användarnamn och (X.509) certifikatautentiseringsuppgifter.

För användarnamnets autentiseringsuppgifter representerar användarnamnet den begärda identiteten och lösenordet visar beviset på innehav. Den betrodda utfärdaren är i det här fallet det system som verifierar användarnamnet och lösenordet.

I certifikatautentiseringsuppgifterna kan ämnesnamnet, alternativt ämnesnamn eller specifika fält i certifikatet användas för att representera den begärda identiteten och/eller funktionerna. Bevis på innehav av data i autentiseringsuppgifterna upprättas med hjälp av den associerade privata nyckeln för att generera en signatur.

Mer information om att programmera överföringssäkerhet och ange autentiseringsuppgifter finns i Bindningar och säkerhets- och säkerhetsbeteenden.

Transportklientens autentiseringstyper

I följande tabell visas de möjliga värden som används när du skapar ett program som använder överföringssäkerhet. Du kan använda dessa värden i antingen kod- eller bindningsinställningar.

Inställning Beskrivning
None Anger att klienten inte behöver presentera några autentiseringsuppgifter. Detta översätts till en anonym klient.
Grundläggande Anger grundläggande autentisering. Mer information finns i RFC2617 http-autentisering: grundläggande och sammanfattad autentisering.
Digest Anger sammanfattad autentisering. Mer information finns i RFC2617 http-autentisering: grundläggande och sammanfattad autentisering.
Ntlm Anger Windows-autentisering med SSPI-förhandling på en Windows-domän.

SSPI-förhandling resulterar i att antingen Kerberos-protokollet eller NT LanMan (NTLM) används.
Windows Anger Windows-autentisering med SSPI på en Windows-domän. SSPI väljer antingen Kerberos-protokollet eller NTLM som autentiseringstjänst.

SSPI försöker Kerberos-protokollet först. Om det misslyckas använder den sedan NTLM.
Certifikat Utför klientautentisering med hjälp av ett certifikat, vanligtvis X.509.

Typer av meddelandeklientautentiseringsuppgifter

I följande tabell visas de möjliga värden som används när du skapar ett program som använder meddelandesäkerhet. Du kan använda dessa värden i antingen kod- eller bindningsinställningar.

Inställning Beskrivning
None Tillåter att tjänsten interagerar med anonyma klienter.
Windows Tillåter soap-meddelandeutbyten under autentiserad kontext för en Windows-autentiseringsuppgift. Använder SSPI-förhandlingsmekanism för att välja från antingen Kerberos-protokollet eller NTLM som en autentiseringstjänst.
Username Tillåter att tjänsten kräver att klienten autentiseras med en autentiseringsuppgift för användarnamn. Observera att WCF inte tillåter några kryptografiska åtgärder med användarnamnet, till exempel att generera en signatur eller kryptera data. Därför framtvingar WCF att transporten skyddas när autentiseringsuppgifterna för användarnamn används.
Certifikat Tillåter att tjänsten kräver att klienten autentiseras med hjälp av ett certifikat.
Cardspace Tillåter att tjänsten kräver att klienten autentiseras med hjälp av ett CardSpace.

Autentiseringsuppgifter för programmering

För var och en av klientautentiseringstyperna kan du med WCF-programmeringsmodellen ange autentiseringsvärden och validatorer för autentiseringsuppgifter med hjälp av tjänstbeteenden och kanalbeteenden.

WCF-säkerhet har två typer av autentiseringsuppgifter: beteende för tjänstautentiseringsuppgifter och beteende för kanalautentiseringsuppgifter. Autentiseringsuppgifter i WCF anger faktiska data, nämligen autentiseringsuppgifter som används för att uppfylla de säkerhetskrav som uttrycks via bindningar. I WCF är en klientklass den körningskomponent som konverterar mellan åtgärdsanrop och meddelanden. Alla klienter ärver från ClientBase<TChannel> klassen. Med ClientCredentials egenskapen i basklassen kan du ange olika värden för klientautentiseringsuppgifter.

I WCF är tjänstbeteenden attribut som tillämpas på klassen som implementerar ett tjänstkontrakt (gränssnitt) för att programmatiskt kontrollera tjänsten. Med ServiceCredentials klassen kan du ange certifikat för tjänstautentiseringsuppgifter och klientverifieringsinställningar för olika typer av klientautentiseringsuppgifter.

Förhandlingsmodell för meddelandesäkerhet

Med meddelandesäkerhetsläget kan du utföra överföringssäkerhet så att tjänstens autentiseringsuppgifter konfigureras på klienten utan band. Om du till exempel använder ett certifikat som lagras i Windows-certifikatarkivet måste du använda ett verktyg, till exempel en MMC-snapin-modul (Microsoft Management Console).

Med meddelandesäkerhetsläget kan du också utföra överföringssäkerhet så att tjänstens autentiseringsuppgifter utbyts med klienten som en del av en inledande förhandling. Om du vill aktivera förhandling anger du NegotiateServiceCredential egenskapen till true.

Se även