Zabezpečení rozhraní API pomocí certifikátů

Dokončeno

Certifikáty je možné použít k zajištění vzájemného ověřování TLS (Transport Layer Security) mezi klientem a bránou rozhraní API. Bránu služby API Management můžete nakonfigurovat tak, aby povolovala pouze požadavky s certifikáty obsahujícími konkrétní kryptografický otisk. Autorizace na úrovni brány probíhá prostřednictvím příchozích zásad.

Ověřování klientů Transport Layer Security

Brána služby API Management může pomocí ověřování klientů TLS zkontrolovat certifikát obsažený v požadavku klienta a ověřit vlastnosti, jako například:

Vlastnost Popis
Certifikační autorita Povolit pouze certifikáty podepsané konkrétní certifikační autoritou
Kryptografický otisk Povolit certifikáty obsahující daný kryptografický otisk
Předmět Povolit pouze certifikáty se zadaným předmětem
Datum vypršení platnosti Nepovolit certifikáty s vypršenou platností

Tyto vlastnosti se vzájemně nevylučují a dají se vzájemně kombinovat a vytvořit tak vlastní požadavky zásad. Můžete například zadat, že certifikát předaný v požadavku je podepsaný a jeho platnost nevypršela.

Klientské certifikáty jsou podepsané, aby se zajistilo, že nejsou manipulovány. Když vám partner pošle certifikát, ověřte, že opravdu pochází od něj a ne od podvodníka. Existují dva běžné způsoby, jak certifikát ověřit:

  • Zkontrolujte, kdo certifikát vydal. Pokud je vystavitelem certifikační autorita, které důvěřujete, můžete certifikát použít. Důvěryhodné certifikační autority můžete nakonfigurovat na webu Azure Portal a proces tak automatizovat.
  • Pokud certifikát vystavil partner, ověřte, že opravdu pochází od něj. Pokud dodává certifikát osobně, můžete si být jeho pravostí jisti. Tyto certifikáty se označují jako certifikáty podepsané svým držitelem.

Přijímání klientských certifikátů na úrovni Consumption

Úroveň Consumption ve službě API Management je navržená tak, aby odpovídala objektům zabezpečení bezserverového návrhu. Pokud vytváříte rozhraní API z bezserverových technologií, jako je například Azure Functions, je tato úroveň dobrou volbou. Na úrovni Consumption musíte použití klientských certifikátů výslovně povolit, což můžete udělat na stránce Vlastní domény. Tento krok není nutný v jiných úrovních.

Konfigurace brány na vyžadování certifikátů

Zásady autorizace certifikátu

Tyto zásady vytvořte v souboru zásad zpracování na vstupu v rámci brány služby API Management:

Tlačítko zásad zpracování na vstupu

Kontrola kryptografického otisku klientského certifikátu

Každý klientský certifikát obsahuje kryptografický otisk, což je hodnota hash vypočítaná z ostatních vlastností certifikátu. Kryptografický otisk zajišťuje, že hodnoty v certifikátu nebyly od vydání certifikátu certifikační autoritou změněny. Kryptografický otisk můžete zkontrolovat ve vašich zásadách. Následující příklad zkontroluje kryptografický otisk certifikátu předaného v požadavku:

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

Kontrola kryptografického otisku vzhledem k certifikátům nahraným do služby API Management

V předchozím příkladu by fungoval pouze jeden kryptografický otisk, takže by byl ověřen pouze jeden certifikát. Obvykle by každá zákaznická nebo partnerská společnost předala jiný certifikát s jiným kryptografickým otiskem. Pokud chcete tento scénář podpořit, získejte certifikáty od partnerů a pomocí stránky Klientské certifikáty na webu Azure Portal je nahrajte do prostředku služby API Management. Do zásad pak přidejte tento kód:

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

Kontrola vystavitele a předmětu klientského certifikátu

Tento příklad zkontroluje vystavitele a předmět certifikátu předaného v požadavku:

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