Uso de certificados de cliente para proteger el acceso a una API

Completado

Los certificados se pueden usar para proporcionar autenticación mutua de TLS entre el cliente y la puerta de enlace de API. Puede configurar la puerta de enlace de API Management para permitir solamente las solicitudes con certificados que contengan una huella digital específica. La autorización en el nivel de puerta de enlace se controla mediante directivas de entrada.

Para la aplicación meteorológica, tiene varios clientes con certificados de cliente emitidos por una entidad de certificación (CA) en la que ambos confían. Quiere permitir que esos clientes se autentiquen al pasar esos certificados.

Aquí, aprenderá a configurar API Management para que acepte certificados de cliente.

Autenticación de clientes TLS

Con la autenticación de clientes TLS, la puerta de enlace de API Management puede inspeccionar el certificado incluido en la solicitud de cliente y comprobar propiedades como las siguientes:

Propiedad Motivo
Entidad de certificación (CA) Permite únicamente certificados firmados por una CA concreta.
Huella digital Permite certificados que contienen una huella digital especificada.
Subject Solo permite certificados con un firmante especificado.
Fecha de expiración Solo permite certificados que no han expirado.

Estas propiedades no son mutuamente excluyentes y se pueden combinar para formar requisitos de directiva propios. Por ejemplo, puede especificar que el certificado que se pasa en la solicitud no haya expirado y que esté firmado por una entidad de certificación determinada.

Los certificados de cliente se firman para garantizar que no se hayan modificado. Cuando un asociado envía un certificado, compruebe que proviene de él y no de un impostor. Hay dos formas habituales de comprobar un certificado:

  • Compruebe quién ha emitido el certificado. Si el emisor ha sido una entidad de certificación en la que confía, puede usar el certificado. Para automatizar este proceso puede configurar las entidades de certificación de confianza en Azure Portal.

  • Si el certificado lo ha emitido un asociado, compruebe que procede de él. Por ejemplo, si entrega el certificado en persona, puede estar seguro de su autenticidad. Estos se conocen como certificados autofirmados.

Aceptación de certificados de cliente en el plan de consumo

El plan Consumo de API Management está diseñado para cumplir los principios de diseño sin servidor. Si compila las API desde tecnologías sin servidor, como Azure Functions, este nivel es una buena opción. En el plan Consumo, debe habilitar de forma explícita el uso de certificados de cliente. Puede hacerlo en el panel Dominios personalizados. Este paso no es necesario en otros niveles.

Configure the gateway to request certificates.

Creación de directivas de autorización de certificados

Cree estas directivas en el archivo de directiva de procesamiento de entrada, en la puerta de enlace de API Management.

Inbound processing policy button.

Comprobación de la huella digital de un certificado de cliente

Todos los certificados de cliente incluyen una huella digital, que es un hash que se calcula a partir de otras propiedades del certificado. La huella digital garantiza que los valores del certificado no se han alterado desde que la entidad emisora de certificados lo ha emitido. Puede comprobar la huella digital en la directiva. En el ejemplo siguiente se comprueba la huella digital del certificado que se ha pasado en la solicitud.

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

Comprobación de la huella digital en relación con certificados cargados en API Management

En el ejemplo anterior, solo funcionaría una huella digital, por lo que solo se validaría un certificado. Normalmente, cada cliente o empresa asociada pasaría un certificado diferente con una huella digital distinta. Para admitir este escenario, obtenga los certificados de los asociados y use el panel Certificados de cliente de Azure Portal para cargarlos en el recurso de API Management. Después, agregue este código a la directiva.

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

Comprobación del emisor y el sujeto de un certificado de cliente

En el siguiente ejemplo, se comprueban el emisor y el firmante del certificado que se ha pasado en la solicitud.

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