Použití klientských certifikátů k zabezpečení přístupu k rozhraní API
Certifikáty slouží k poskytování vzájemného ověřování TLS 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.
Pro vaši meteorologickou aplikaci máte některé zákazníky, kteří mají klientské certifikáty vydané certifikační autoritou(CA), kterým oba důvěřujete. Těmto zákazníkům chcete povolit, aby se ověřovali předáním těchto certifikátů.
Tady se dozvíte, jak nakonfigurovat službu API Management tak, aby přijímala klientské certifikáty.
Ověřování klientů TLS
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 | Důvod |
---|---|
Certifikační autorita | Povolte pouze certifikáty podepsané konkrétní certifikační autoritou. |
Kryptografický otisk | Povolit certifikáty obsahující zadaný kryptografický otisk |
Předmět | Povolte pouze certifikáty se zadaným předmětem. |
Datum vypršení platnosti | Povolte pouze certifikáty, jejichž platnost nevypršela. |
Tyto vlastnosti se vzájemně nevylučují a dají se kombinovat a vytvořit tak vlastní požadavky zásad. Můžete například určit, že platnost certifikátu předaného v požadavku nevypršela a že byl podepsán konkrétní certifikační autoritou.
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 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řijetí klientských certifikátů na úrovni Consumption
Úroveň Consumption ve službě API Management je navržená tak, aby odpovídala principům návrhu bez serveru. 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 explicitně povolit použití klientských certifikátů, které můžete provést v podokně Vlastní domény . Tento krok není nutný v jiných úrovních.
Vytvoření zásad autorizace certifikátů
Tyto zásady vytvořte v souboru zásad příchozího zpracování v bráně služby API Management.
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ář podporovat, získejte certifikáty od partnerů a pomocí podokna Klientské certifikáty na webu Azure Portal je nahrajte do prostředku služby API Management. Pak do zásad 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
Následující 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>