Delen via


Beveiligingsoverzicht

Het beveiligingsframework in de Windows Web Services-API (WWSAPI) biedt:

  • Berichtintegriteit, vertrouwelijkheid, detectie van herhalingen en serververificatie met transportbeveiliging.
  • Clientverificatie, zoals validatie van beveiligingstokens, certificaatvertrouwens- en intrekkingscontroles, enzovoort met SOAP-berichtbeveiliging of transportbeveiliging.

Het beveiligingsprogrammamodel

Beveiliging is gekoppeld aan communicatiekanalen. Het beveiligen van een kanaal bestaat uit de volgende stappen.

  • Maak en initialiseer een of meer beveiligingsbindingen geschikt voor de beveiligingsvereisten van de toepassing.
  • Maak een beveiligingsbeschrijving die deze beveiligingsbindingen bevat.
  • Maak een -kanaal of -serviceproxy (aan de clientzijde), of maak een -listener of -servicehost (aan de serverzijde) waarbij je die beveiligingsbeschrijving doorgeeft.
  • Doe de normale kanaalprogrammeringsstappen van Openen, Accepteren, Verzenden, Ontvangen, Sluiten, enzovoort.

Berichten die op het kanaal worden verzonden en ontvangen, worden automatisch beveiligd door de runtime volgens de opgegeven beveiligingsbeschrijving. U kunt deze stappen desgewenst verfijnen door een of meer beveiligingsinstellingen voor het hele kanaal op te geven in de beveiligingsbeschrijving of beveiligingsinstellingen voor de hele binding in een beveiligingsbinding.

Elke vereiste autorisatie van afzenderidentiteiten moet worden uitgevoerd door de toepassing met behulp van de beveiligingsverwerkingsresultaten gekoppeld aan elk ontvangen bericht. Autorisatiestappen worden niet opgegeven in de beveiligingsbeschrijving en worden ook niet automatisch uitgevoerd door de runtime.

Fouten in de beschrijving van de beveiliging, zoals niet-ondersteunde bindingen, niet-toepasbare eigenschappen/velden, ontbrekende vereiste eigenschappen/velden of ongeldige eigenschaps-/veldwaarden, leiden ertoe dat het maken van kanalen of listeners mislukt.

Beveiligingsbindingen selecteren

Bij het ontwerpen van beveiliging voor een toepassing is de primaire beslissing de selectie van de beveiligingsbindingen die moeten worden opgenomen in de beveiligingsbeschrijving. Hier volgen enkele richtlijnen voor het kiezen van beveiligingsbindingen die geschikt zijn voor het beveiligingsscenario van een toepassing. Een handige heuristiek is om eerst te begrijpen welke typen beveiligingsreferenties (zoals X.509-certificaten, Windows-domeingebruikersnamen/wachtwoorden, toepassing gedefinieerde gebruikersnaam/wachtwoorden) beschikbaar zijn voor de toepassing en vervolgens een beveiligingsbinding kiezen die dat referentietype kan gebruiken.

Kanalen en beveiliging

Zoals hierboven vermeld, is beveiliging gericht op kanalen. Bovendien worden kanaalbewerkingen consistent toegewezen aan beveiligingsstappen voor alle beveiligingsbindingen.

  • Kanaal maken: de set beveiligingsbindingen die zijn opgegeven in de beveiligingsbeschrijving, wordt gevalideerd en blijft daarna vast voor het kanaal. De vorm van de kanaalstack, inclusief eventuele zijkanalen die moeten worden gebruikt voor onderhandelingen op basis van WS-Trust, wordt ook bepaald.
  • Kanaal geopend: referenties die worden opgegeven als onderdeel van beveiligingsbindingen worden geladen en beveiligingssessies worden tot stand gebracht. Over het algemeen bevat een open kanaal een actuele beveiligingsstatus. Het openen van een clientkanaal specificeert ook het eindpuntadres van de server waartegen serververificatie door de runtime zal worden uitgevoerd.
  • Tussen kanaal geopend en gesloten: berichten kunnen tijdens deze fase veilig worden verzonden en ontvangen.
  • Bericht verzenden: Tokens voor beveiligingscontext worden naar behoefte verkregen of vernieuwd en de beveiliging wordt toegepast op elk verzonden bericht volgens de beveiligingsbeschrijving. Fouten die optreden bij het toepassen van beveiliging, worden als verzendfouten geretourneerd naar de toepassing.
  • Bericht ontvangen: De veiligheid wordt geverifieerd op elk ontvangen bericht volgens de veiligheidsbeschrijving. Eventuele beveiligingsfouten van berichten worden geretourneerd naar de toepassing als ontvangen fouten. Deze fouten per bericht hebben geen invloed op de kanaalstatus of volgende ontvangst. De toepassing kan een mislukte ontvangst negeren en een ontvangst opnieuw starten voor een ander bericht.
  • Kanaal wordt afgebroken: het kanaal kan op elk gewenst moment worden afgebroken om alle I/O op het kanaal te stoppen. Bij het afbreken krijgt het kanaal een foutieve status en staat het niet meer toe dat er verzonden of ontvangen worden. Het kanaal kan echter nog steeds een 'live' beveiligingsstatus behouden, dus het afsluiten van het kanaal is noodzakelijk om de status correct op te ruimen.
  • Kanaal sluiten: de beveiligingsstatus die bij openen is gemaakt, wordt verwijderd en sessies worden afgebroken. Tokens voor beveiligingscontext worden geannuleerd. De kanaalstack blijft behouden, maar bevat geen 'live' veiligheidsstatus of geladen inloggegevens.
  • Kanaal vrijgegeven: de kanaalstack die is gebouwd bij aanmaak, samen met alle beveiligingsbronnen, wordt vrijgemaakt.

Beveiligings-API's

De API-documentatie voor beveiliging is gegroepeerd in de volgende onderwerpen.

Veiligheid

Wanneer u de WWSAPI Security-API gebruikt, lopen toepassingen verschillende beveiligingsrisico's:

onbedoelde onjuiste configuratie

WWSAPI ondersteunt een reeks beveiligingsconfiguratieopties. Zie bijvoorbeeld WS_SECURITY_BINDING_PROPERTY_ID. Sommige van deze opties, zoals WS_SECURITY_BINDING_PROPERTY_ALLOW_ANONYMOUS_CLIENTS toestaan dat de toepassing het standaardniveau van beveiliging verlaagt dat wordt geboden door de verschillende beveiligingsbindingen. Het gebruik van dergelijke opties moet zorgvuldig worden geëvalueerd om ervoor te zorgen dat er geen resulterende aanvalsvectoren zijn.

Bovendien kan een toepassing, zoals hierboven beschreven, bepaalde stappen, die nodig zijn om een berichtenuitwisseling volledig te beveiligen, uitschakelen, zoals het uitschakelen van versleuteling toestaan, zelfs wanneer beveiligingsreferenties worden verzonden. Dit is toegestaan om bepaalde specifieke scenario's in te schakelen en mag niet worden gebruikt voor algemene communicatie. De WS_PROTECTION_LEVEL moet specifiek worden verlaagd om deze scenario's mogelijk te maken en toepassingen mogen deze waarde niet wijzigen, tenzij dit absoluut noodzakelijk is, omdat hierdoor veel controles worden uitgeschakeld die zijn ontworpen om een veilige configuratie te garanderen.

vertrouwelijke informatie opslaan in het geheugen

Vertrouwelijke informatie, zoals wachtwoorden, die zijn opgeslagen in het geheugen, is kwetsbaar voor het uitgepakt worden door een bevoegde aanvaller door bijvoorbeeld het paginabestand. WWSAPI maakt een kopie van opgegeven referenties en versleutelt die kopie, waardoor de oorspronkelijke gegevens onbeveiligd blijven. Het is de verantwoordelijkheid van de toepassing om het oorspronkelijke exemplaar te beveiligen. Bovendien wordt de versleutelde kopie kort ontsleuteld tijdens het gebruik, waarbij een venster wordt geopend om het te extraheren.

Denial-of-Service-aanval

Beveiligingsverwerking kan aanzienlijke resources verbruiken. Elke extra beveiligingsbinding verhoogt deze kosten. WWSAPI aborteert de beveiligingsverwerking zodra er een fout in beveiligingsverificatie optreedt, maar bepaalde controles, zoals autorisatiebeslissingen, kunnen pas plaatsvinden nadat er aanzienlijk werk is uitgevoerd.

Terwijl een bericht op de server wordt verwerkt, wordt de beveiligingsstatus opgeslagen op de heap van het bericht. De toepassing kan het geheugenverbruik tijdens de beveiligingsverwerking beperken door de grootte van die heap via WS_MESSAGE_PROPERTY_HEAP_PROPERTIES te verminderen. Daarnaast kunnen bepaalde beveiligingsbindingen, zoals de WS_SECURITY_CONTEXT_MESSAGE_SECURITY_BINDING ervoor zorgen dat de server resources toewijst namens de client. De limieten voor deze resources kunnen worden geconfigureerd met behulp van de volgende WS_SECURITY_BINDING_PROPERTY_ID waarden:

  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_PENDING_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_MAX_ACTIVE_CONTEXTS
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_RENEWAL_INTERVAL
  • WS_SECURITY_BINDING_PROPERTY_SECURITY_CONTEXT_ROLLOVER_INTERVAL

Als u deze limieten instelt op lage waarden, vermindert u het maximale geheugenverbruik, maar kan dit ertoe leiden dat legitieme clients worden geweigerd wanneer het quotum wordt bereikt.