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.
Er zijn verbeteringen aangebracht die van invloed zijn op de manier waarop geïntegreerde Windows-verificatie wordt verwerkt door de HttpWebRequestklassen , HttpListener, SmtpClientSslStream, NegotiateStreamen gerelateerde klassen in de System.Net en gerelateerde naamruimten. Er is ondersteuning toegevoegd voor uitgebreide beveiliging om de beveiliging te verbeteren.
Deze wijzigingen kunnen van invloed zijn op toepassingen die deze klassen gebruiken om webaanvragen te maken en antwoorden te ontvangen waarbij geïntegreerde Windows-verificatie wordt gebruikt. Deze wijziging kan ook van invloed zijn op webservers en clienttoepassingen die zijn geconfigureerd voor het gebruik van geïntegreerde Windows-verificatie.
Deze wijzigingen kunnen ook van invloed zijn op toepassingen die deze klassen gebruiken om andere soorten aanvragen te maken en antwoorden te ontvangen waarbij geïntegreerde Windows-verificatie wordt gebruikt.
De wijzigingen ter ondersteuning van uitgebreide beveiliging zijn alleen beschikbaar voor toepassingen in Windows 7 en Windows Server 2008 R2. De uitgebreide beveiligingsfuncties zijn niet beschikbaar in eerdere versies van Windows.
Overzicht
Dankzij het ontwerp van geïntegreerde Windows-verificatie kunnen sommige referentievraagantwoorden universeel zijn, wat betekent dat ze opnieuw kunnen worden gebruikt of doorgestuurd. De antwoorden op de uitdaging moeten minimaal worden samengesteld met specifieke doelinformatie en bij voorkeur ook met bepaalde kanaalspecifieke informatie. Services kunnen vervolgens uitgebreide bescherming bieden om ervoor te zorgen dat reacties op referentie-uitdagingen specifieke service-informatie bevatten, zoals een Service Principal Name (SPN). Met deze informatie in de referentie-uitwisselingen kunnen services beter beschermen tegen kwaadwillend gebruik van referentievraagantwoorden die mogelijk onjuist zijn gebruikt.
Het uitgebreide beveiligingsontwerp is een uitbreiding van verificatieprotocollen die zijn ontworpen om verificatierelaisaanvallen te beperken. Het draait om het concept van kanaal- en servicebindingsinformatie.
De algemene doelstellingen zijn:
Als de client wordt bijgewerkt ter ondersteuning van de uitgebreide beveiliging, moeten toepassingen een kanaalbinding en servicebindingsinformatie leveren aan alle ondersteunde verificatieprotocollen. Informatie over kanaalbindingen kan alleen worden opgegeven wanneer er een kanaal (TLS) is om mee te verbinden. Informatie over servicebindingen moet altijd worden verstrekt.
Bijgewerkte servers die correct zijn geconfigureerd, kunnen de bindingsgegevens van het kanaal en de service controleren wanneer deze aanwezig zijn in het token voor clientverificatie en de verificatiepoging weigeren als de kanaalbindingen niet overeenkomen. Afhankelijk van het implementatiescenario kunnen servers kanaalbinding, servicebinding of beide verifiëren.
Bijgewerkte servers hebben de mogelijkheid om clientaanvragen op down-level te accepteren of af te wijzen die geen bindingsgegevens voor kanalen bevatten op basis van beleid.
Informatie die wordt gebruikt door uitgebreide beveiliging bestaat uit een of beide van de volgende twee onderdelen:
Een kanaalbindingstoken (CBT).
Servicebindingsinformatie in de vorm van een Service Principal Name of SPN.
Servicebindingsinformatie is een indicatie van de intentie van een client om te verifiëren bij een bepaald service-eindpunt. Het wordt gecommuniceerd van client naar server met de volgende eigenschappen:
De SPN-waarde moet beschikbaar zijn voor de server die clientauthenticatie uitvoert in klare tekst.
De waarde van de SPN is openbaar.
De SPN moet cryptografisch worden beveiligd tijdens overdracht, zodat een man-in-the-middle-aanval de waarde niet kan invoegen, verwijderen of wijzigen.
Een CBT is een eigenschap van het buitenste beveiligde kanaal (zoals TLS) dat wordt gebruikt om het te binden aan een gesprek via een binnenste, clientauthenticeerd kanaal. De CBT moet de volgende eigenschappen hebben (ook gedefinieerd door IETF RFC 5056):
Wanneer er een buitenkanaal bestaat, moet de waarde van de CBT een eigenschap zijn die het buitenste kanaal of het servereindpunt identificeert, onafhankelijk aangekomen door zowel client- als serverzijden van een gesprek.
De waarde van de CBT die door de client wordt verzonden, mag niet iets zijn dat een aanvaller kan beïnvloeden.
Er worden geen garanties gegeven voor de geheimhouding van de CBT-waarde. Dit betekent echter niet dat de waarde van de servicebinding en de kanaalbindingsinformatie altijd door iedereen behalve de server die de verificatie uitvoert, kan worden onderzocht, omdat het protocol dat de CBT vervoert, deze kan versleutelen.
De CBT moet cryptografisch integriteit zijn beveiligd tijdens overdracht, zodat een aanvaller de waarde ervan niet kan invoegen, verwijderen of wijzigen.
Kanaalbinding wordt bereikt door de client die de SPN en de CBT op een manipulatiebestendige manier naar de server overdraagt. De server valideert de bindingsgegevens van het kanaal in overeenstemming met het beleid en weigert verificatiepogingen waarvoor het niet denkt dat het het beoogde doel is. Op deze manier worden de twee kanalen cryptografisch gebonden.
Om de compatibiliteit met bestaande clients en toepassingen te behouden, kan een server worden geconfigureerd om verificatiepogingen toe te staan door clients die nog geen uitgebreide beveiliging ondersteunen. Dit wordt een gedeeltelijk geharde configuratie genoemd, in tegenstelling tot een volledig geharde configuratie.
Meerdere onderdelen in de System.Net en System.Net.Security naamruimten voeren geïntegreerde Windows-verificatie uit namens een aanroepende toepassing. In deze sectie worden wijzigingen in System.Net onderdelen beschreven om uitgebreide beveiliging toe te voegen bij het gebruik van geïntegreerde Windows-verificatie.
Uitgebreide beveiliging wordt momenteel ondersteund in Windows 7. Er wordt een mechanisme geboden, zodat een toepassing kan bepalen of het besturingssysteem uitgebreide beveiliging ondersteunt.
Wijzigingen in de ondersteuning van uitgebreide beveiliging
Het verificatieproces dat wordt gebruikt met geïntegreerde Windows-verificatie, afhankelijk van het gebruikte verificatieprotocol, omvat vaak een uitdaging die is uitgegeven door de doelcomputer en wordt teruggestuurd naar de clientcomputer. Uitgebreide beveiliging voegt nieuwe functies toe aan dit verificatieproces
De System.Security.Authentication.ExtendedProtection naamruimte biedt ondersteuning voor verificatie met uitgebreide beveiliging voor toepassingen. De ChannelBinding klasse in deze naamruimte vertegenwoordigt een kanaalbinding. De ExtendedProtectionPolicy klasse in deze naamruimte vertegenwoordigt het uitgebreide beveiligingsbeleid dat door de server wordt gebruikt om binnenkomende clientverbindingen te valideren. Andere leden van de klasse worden gebruikt met uitgebreide beveiliging.
Voor servertoepassingen zijn deze klassen het volgende:
Een ExtendedProtectionPolicy met de volgende elementen:
Een OSSupportsExtendedProtection eigenschap die aangeeft of het besturingssysteem geïntegreerde Windows-verificatie ondersteunt met uitgebreide beveiliging.
Een PolicyEnforcement waarde die aangeeft wanneer het uitgebreide beveiligingsbeleid moet worden afgedwongen.
Een ProtectionScenario waarde die het implementatiescenario aangeeft. Dit is van invloed op hoe uitgebreide beveiliging wordt gecontroleerd.
Een optioneel ServiceNameCollection dat de aangepaste SPN-lijst bevat die wordt gebruikt om overeen te komen met de SPN die door de client wordt geleverd als het beoogde doel van de verificatie.
Een optioneel ChannelBinding dat een aangepaste kanaalbinding bevat die moet worden gebruikt voor validatie. Dit scenario is geen veelvoorkomend geval
De System.Security.Authentication.ExtendedProtection.Configuration naamruimte biedt ondersteuning voor de configuratie van verificatie met uitgebreide beveiliging voor toepassingen.
Er zijn een aantal functiewijzigingen aangebracht ter ondersteuning van uitgebreide beveiliging in de bestaande System.Net naamruimte. Deze wijzigingen zijn onder andere:
Een nieuwe TransportContext klasse die is toegevoegd aan de System.Net naamruimte die een transportcontext vertegenwoordigt.
Nieuwe EndGetRequestStream- en GetRequestStream-overloadmethodes in de HttpWebRequest-klasse waarmee de TransportContext kan worden opgehaald ter ondersteuning van uitgebreide bescherming voor klantapplicaties.
Toevoegingen aan de HttpListener en HttpListenerRequest klassen ter ondersteuning van servertoepassingen.
Er is een functiewijziging aangebracht ter ondersteuning van uitgebreide beveiliging voor SMTP-clienttoepassingen in de bestaande System.Net.Mail naamruimte:
- Een TargetName eigenschap in de SmtpClient klasse die de SPN vertegenwoordigt die moet worden gebruikt voor verificatie bij het gebruik van uitgebreide beveiliging voor SMTP-clienttoepassingen.
Er zijn een aantal functiewijzigingen aangebracht ter ondersteuning van uitgebreide beveiliging in de bestaande System.Net.Security naamruimte. Deze wijzigingen zijn onder andere:
Nieuwe BeginAuthenticateAsClient en AuthenticateAsClient overbelastingsmethoden in de NegotiateStream klasse waarmee een CBT kan worden doorgegeven ter ondersteuning van uitgebreide beveiliging voor clienttoepassingen.
Nieuwe BeginAuthenticateAsServer en AuthenticateAsServer overbelastingsmethoden in de NegotiateStream-klasse waarmee u een ExtendedProtectionPolicy kunt doorgeven om uitgebreide beveiliging voor servertoepassingen te ondersteunen.
Een nieuwe TransportContext eigenschap in de SslStream klasse ter ondersteuning van uitgebreide beveiliging voor client- en servertoepassingen.
Er is een SmtpNetworkElement eigenschap toegevoegd ter ondersteuning van de configuratie van uitgebreide beveiliging voor SMTP-clients in de System.Net.Security naamruimte.
Uitgebreide beveiliging voor clienttoepassingen
Uitgebreide beveiligingsondersteuning voor de meeste clienttoepassingen vindt automatisch plaats. De HttpWebRequest en SmtpClient klassen ondersteunen uitgebreide beveiliging wanneer de onderliggende versie van Windows uitgebreide beveiliging ondersteunt. Een HttpWebRequest exemplaar verzendt een SPN die is samengesteld op basis van de Uri. Standaard verzendt een SmtpClient exemplaar een SPN die is samengesteld op basis van de hostnaam van de SMTP-e-mailserver.
Voor aangepaste verificatie kunnen clienttoepassingen de HttpWebRequest.EndGetRequestStream(IAsyncResult, TransportContext) of HttpWebRequest.GetRequestStream(TransportContext) methoden in de HttpWebRequest klasse gebruiken waarmee de TransportContext en de CBT kunnen worden opgehaald met behulp van de GetChannelBinding methode.
De SPN die moet worden gebruikt voor geïntegreerde Windows-verificatie die door een HttpWebRequest exemplaar naar een bepaalde service wordt verzonden, kan worden overschreven door de CustomTargetNameDictionary eigenschap in te stellen.
De TargetName eigenschap kan worden gebruikt om een aangepaste SPN in te stellen voor geïntegreerde Windows-verificatie voor de SMTP-verbinding.
Uitgebreide beveiliging voor servertoepassingen
HttpListener biedt automatisch mechanismen voor het valideren van servicebindingen bij het uitvoeren van HTTP-verificatie.
Het veiligste scenario is het inschakelen van uitgebreide beveiliging voor HTTPS:// voorvoegsels. In dit geval stelt u HttpListener.ExtendedProtectionPolicy in op een ExtendedProtectionPolicy met PolicyEnforcement uitgevoerd met WhenSupported of Always, en ProtectionScenario stelt u in op TransportSelected. Een waarde van WhenSupported zet HttpListener in gedeeltelijk verharde modus, terwijl Always overeenkomt met volledig verharde modus.
In deze configuratie wanneer een aanvraag naar de server wordt gedaan via een extern beveiligd kanaal, wordt het buitenste kanaal opgevraagd voor een kanaalbinding. Deze kanaalbinding wordt doorgegeven aan de verificatie-SSPI-aanroepen, die valideren dat de kanaalbinding in de verificatieblob overeenkomt. Er zijn drie mogelijke resultaten:
Het onderliggende besturingssysteem van de server biedt geen ondersteuning voor uitgebreide beveiliging. De aanvraag wordt niet blootgesteld aan de toepassing en er wordt een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
De SSPI-aanroep mislukt die aangeeft dat de client een kanaalbinding heeft opgegeven die niet overeenkomt met de verwachte waarde die is opgehaald uit het buitenste kanaal of dat de client geen kanaalbinding heeft opgegeven wanneer het uitgebreide beveiligingsbeleid op de server is geconfigureerd voor Always. In beide gevallen wordt de aanvraag niet blootgesteld aan de toepassing en wordt een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
De client geeft de juiste kanaalbinding op of is toegestaan om verbinding te maken zonder een kanaalbinding op te geven, omdat het uitgebreide beveiligingsbeleid op de server is geconfigureerd met WhenSupported de aanvraag wordt geretourneerd naar de toepassing voor verwerking. Automatisch wordt er geen servicenaamcontrole uitgevoerd. Een toepassing kan ervoor kiezen om een eigen servicenaamvalidatie uit te voeren met behulp van de ServiceName eigenschap, maar onder deze omstandigheden is deze redundant.
Als een toepassing zijn eigen SSPI-aanroepen uitvoert om verificatie uit te voeren op basis van blobs die heen en weer worden doorgegeven binnen de hoofdtekst van een HTTP-aanvraag en die kanaalbinding wil ondersteunen, moet deze de verwachte kanaalbinding ophalen uit het buitenste beveiligde kanaal om HttpListener deze door te geven aan de systeemeigen Win32 AcceptSecurityContext-functie . Gebruik hiervoor de TransportContext eigenschap en aanroepmethode GetChannelBinding om de CBT op te halen. Alleen eindpuntbindingen worden ondersteund. Als er iets anders Endpoint is opgegeven, wordt er een NotSupportedException gegenereerd. Als het onderliggende besturingssysteem kanaalbinding ondersteunt, geeft de GetChannelBinding methode een ChannelBindingSafeHandle die een aanwijzer naar een kanaalbinding omhult, geschikt voor het doorgeven aan de functie AcceptSecurityContext als het pvBuffer-lid van een SecBuffer-structuur die wordt doorgegeven in de pInput parameter. De Size eigenschap bevat de lengte, in bytes, van de kanaalbinding. Als het onderliggende besturingssysteem geen kanaalbindingen ondersteunt, retourneert nullde functie .
Een ander mogelijk scenario is om uitgebreide beveiliging in te schakelen voor HTTP:// voorvoegsels wanneer proxy's niet worden gebruikt. In dit geval stelt u HttpListener.ExtendedProtectionPolicy in op een ExtendedProtectionPolicy met PolicyEnforcement uitgevoerd met WhenSupported of Always, en ProtectionScenario stelt u in op TransportSelected. Een waarde van WhenSupported zet HttpListener in gedeeltelijk verharde modus, terwijl Always overeenkomt met volledig verharde modus.
Er wordt een standaardlijst met toegestane servicenamen gemaakt op basis van de voorvoegsels die zijn geregistreerd bij de HttpListener. Deze standaardlijst kan worden onderzocht via de DefaultServiceNames eigenschap. Als deze lijst niet volledig is, kan een toepassing een verzameling aangepaste servicenamen opgeven in de constructor voor de ExtendedProtectionPolicy klasse die wordt gebruikt in plaats van de standaardlijst met servicenamen.
In deze configuratie, wanneer een verzoek wordt ingediend bij de server zonder authenticatie via een buitenste beveiligd kanaal, verloopt het normaal gesproken zonder een kanaalbindingcontrole. Als de verificatie slaagt, wordt de context opgevraagd voor de servicenaam die de client heeft opgegeven en gevalideerd op basis van de lijst met acceptabele servicenamen. Er zijn vier mogelijke resultaten:
Het onderliggende besturingssysteem van de server biedt geen ondersteuning voor uitgebreide beveiliging. De aanvraag wordt niet blootgesteld aan de toepassing en er wordt een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
Het onderliggende besturingssysteem van de client biedt geen ondersteuning voor uitgebreide beveiliging. In de WhenSupported configuratie slaagt de verificatiepoging en wordt de aanvraag geretourneerd naar de toepassing. In de Always-configuratie zal de authenticatiepoging mislukken. De aanvraag wordt niet blootgesteld aan de toepassing en er wordt een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
Het onderliggende besturingssysteem van de client ondersteunt uitgebreide beveiliging, maar de toepassing heeft geen servicebinding opgegeven. De aanvraag wordt niet blootgesteld aan de toepassing en er wordt een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
De client heeft een servicebinding opgegeven. De servicebinding wordt vergeleken met de lijst met toegestane servicebindingen. Als deze overeenkomt, wordt de aanvraag geretourneerd naar de toepassing. Anders wordt de aanvraag niet blootgesteld aan de toepassing en wordt er automatisch een niet-geautoriseerd (401) antwoord geretourneerd naar de client. Er wordt een bericht geregistreerd bij de HttpListener traceringsbron waarin de reden voor de fout wordt opgegeven.
Als deze eenvoudige benadering van een toegestane lijst met acceptabele servicenamen onvoldoende is, kan een toepassing een eigen servicenaamvalidatie opgeven door een query uit te voeren op de ServiceName eigenschap. In gevallen 1 en 2 hierboven zal de eigenschap null retourneren. In het geval van 3 wordt een lege tekenreeks geretourneerd. In het geval van 4 wordt de servicenaam die door de client is opgegeven, geretourneerd.
Deze uitgebreide beveiligingsfuncties kunnen ook worden gebruikt door servertoepassingen voor verificatie met andere typen aanvragen en wanneer vertrouwde proxy's worden gebruikt.