Clientcertificaten gebruiken voor beveiligde toegang tot een API
Certificaten kunnen worden gebruikt voor wederzijdse TLS-verificatie tussen de client en de API-gateway. U kunt de API Management-gateway configureren om alleen aanvragen met certificaten die een specifieke vingerafdruk bevatten toe te staan. De autorisatie op gatewayniveau wordt afgehandeld met binnenkomende beleidsregels.
Voor uw meteorologische app hebt u enkele klanten die clientcertificaten hebben uitgegeven door een certificeringsinstantie (CA) die u allebei vertrouwt. U wilt dat deze klanten zich kunnen verifiëren door die certificaten door te geven.
Hier leert u hoe u API Management configureert om clientcertificaten te accepteren.
TLS-clientverificatie
Met TLS-clientverificatie kan in de API Management-gateway het certificaat dat is opgenomen in de clientaanvraag worden geïnspecteerd en gecontroleerd op eigenschappen zoals:
Eigenschappen | Reden |
---|---|
Certificeringsinstantie (CA) | Alleen certificaten toestaan die zijn ondertekend door een bepaalde CA. |
Vingerafdruk | Certificaten met een opgegeven vingerafdruk toestaan. |
Onderwerp | Alleen certificaten met een opgegeven onderwerp toestaan. |
Vervaldatum | Alleen certificaten toestaan die niet zijn verlopen. |
Deze eigenschappen sluiten elkaar niet wederzijds uit en kunnen worden gecombineerd om uw eigen beleidsvereisten te vormen. U kunt bijvoorbeeld opgeven dat het certificaat dat is doorgegeven in de aanvraag niet is verlopen en is ondertekend door een bepaalde certificeringsinstantie.
Clientcertificaten zijn ondertekend om ervoor te zorgen dat ze niet met elkaar zijn geknoeid. Wanneer een partner u een certificaat stuurt, moet u controleren of het afkomstig van deze partner en niet van een oplichter. Er zijn twee gebruikelijke manieren om een certificaat te controleren:
Controleer wie het certificaat heeft uitgegeven. Als de uitgever een certificeringsinstantie is die u vertrouwt is, kunt u het certificaat gebruiken. U kunt de vertrouwde certificeringsinstanties configureren in Azure Portal om dit proces te automatiseren.
Als het certificaat is uitgegeven door een partner, controleert u of het van hen afkomstig is. Als deze het certificaat bijvoorbeeld persoonlijk overhandigt, kunt u er zeker van zijn dat het echt is. Deze certificaten worden zelfondertekende certificaten genoemd.
Clientcertificaten accepteren in de verbruikslaag
De verbruikslaag in API Management is ontworpen om te voldoen aan serverloze ontwerpprincipes. Als u uw API's bouwt vanuit serverloze technologieën, zoals Azure Functions, is deze servicelaag geschikt. In de verbruikslaag moet u het gebruik van clientcertificaten expliciet inschakelen. Dit kunt u doen in het deelvenster Aangepaste domeinen . Deze stap is niet nodig in andere lagen.
Certificaatautorisatiebeleid maken
Maak deze beleidsregels in het inkomende verwerkingsbeleidsbestand in de API Management-gateway.
De vingerafdruk van een clientcertificaat controleren
Elk clientcertificaat bevat een vingerafdruk. Dat is een hash die wordt berekend op basis van andere certificaateigenschappen. De vingerafdruk zorgt ervoor dat de waarden in het certificaat niet zijn gewijzigd sinds het certificaat is uitgegeven door de certificeringsinstantie. U kunt de vingerafdruk controleren in uw beleid. In het volgende voorbeeld wordt de vingerafdruk gecontroleerd van het certificaat dat is doorgegeven in de aanvraag.
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Thumbprint != "desired-thumbprint")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
De vingerafdruk controleren in certificaten die zijn geüpload naar API Management
In het vorige voorbeeld zou slechts één vingerafdruk werken en er dus slechts één certificaat worden gevalideerd. Gewoonlijk geeft elke klant of elk partnerbedrijf een ander certificaat met een andere vingerafdruk door. Ter ondersteuning van dit scenario verkrijgt u de certificaten van uw partners en gebruikt u het deelvenster Clientcertificaten in Azure Portal om ze te uploaden naar de API Management-resource. Voeg vervolgens deze code toe aan uw beleid.
<choose>
<when condition="@(context.Request.Certificate == null || !context.Request.Certificate.Verify() || !context.Deployment.Certificates.Any(c => c.Value.Thumbprint == context.Request.Certificate.Thumbprint))" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>
De certificaatverlener en het onderwerp van een clientcertificaat controleren
In het volgende voorbeeld wordt de verlener en het onderwerp gecontroleerd van het certificaat dat is doorgegeven in de aanvraag.
<choose>
<when condition="@(context.Request.Certificate == null || context.Request.Certificate.Issuer != "trusted-issuer" || context.Request.Certificate.SubjectName.Name != "expected-subject-name")" >
<return-response>
<set-status code="403" reason="Invalid client certificate" />
</return-response>
</when>
</choose>