Verwenden von Clientzertifikaten zum Schutz des Zugriffs auf eine API

Abgeschlossen

Zertifikate eignen sich zur gegenseitigen TLS-Authentifizierung zwischen Client und API-Gateway. Das API Management-Gateway kann so konfiguriert werden, dass nur Anforderungen mit Zertifikaten zugelassen werden, die einen bestimmten Fingerabdruck enthalten. Auf der Gatewayebene erfolgt die Autorisierung über eingehende Richtlinien.

Bei Ihrer Wetter-App verfügen einige Ihrer Kund*innen über Clientzertifikate, die von einer Zertifizierungsstelle ausgestellt wurden, die beide Seiten als vertrauenswürdig einstufen. Diese Kunden sollen sich durch Übergabe jener Zertifikate authentifizieren können.

In diesem Abschnitt erfahren Sie, wie Sie API Management so konfigurieren, dass Clientzertifikate akzeptiert werden.

TLS-Clientauthentifizierung

Mithilfe der TLS-Clientauthentifizierung kann das API Management-Gateway ein Zertifikat in der Clientanforderung nach den folgenden Eigenschaften überprüfen:

Eigenschaft Grund
Zertifizierungsstelle Es werden nur Zertifikate einer bestimmten Zertifizierungsstelle zugelassen.
Fingerabdruck Zertifikate mit einem angegebenen Fingerabdruck werden zugelassen.
Subject Es werden nur Zertifikate mit einem angegebenen Antragsteller zugelassen.
Ablaufdatum Lassen Sie nur Zertifikate zu, die nicht abgelaufen sind.

Diese Eigenschaften schließen sich nicht gegenseitig aus und können zu Ihren eigenen Richtlinienanforderungen kombiniert werden. So können Sie beispielsweise angeben, dass das in der Anforderung übergebene Zertifikat nicht abgelaufen ist und von einer bestimmten Zertifizierungsstelle signiert wurde.

Clientzertifikate werden signiert, um sie vor Manipulation zu schützen. Wenn Sie ein Zertifikat von einem Partner erhalten, überprüfen Sie, dass es tatsächlich von ihm und nicht von einem Betrüger gesendet wurde. Zur Überprüfung eines Zertifikats gibt es zwei gängige Möglichkeiten:

  • Überprüfen Sie, von wem das Zertifikat ausgestellt wurde. Handelt es sich dabei um eine vertrauenswürdige Zertifizierungsstelle, können Sie das Zertifikat verwenden. Im Azure-Portal können Sie vertrauenswürdige Zertifizierungsstellen konfigurieren, um diesen Vorgang zu automatisieren.

  • Wenn das Zertifikat von einem Partner ausgestellt wurde, überprüfen Sie, ob es von ihm stammt. Wurde das Zertifikat beispielweise persönlich bereitgestellt, können Sie sicher sein, dass es echt ist. Diese Zertifikate werden als selbstsignierte Zertifikate bezeichnet.

Akzeptieren von Clientzertifikaten im Verbrauchstarif

Der Verbrauchstarif in API Management wurde für serverlose Designs konzipiert. Dieser Tarif eignet sich für das Erstellen von APIs auf Grundlage von serverlosen Technologien, wie z. B. Azure Functions. Die Verwendung von Clientzertifikaten muss im Verbrauchstarif explizit aktiviert werden (über den Bereich Benutzerdefinierte Domänen). Dieser Schritt ist in anderen Tarifen nicht erforderlich.

Konfigurieren des Gateways zum Anfordern von Zertifikaten

Erstellen von Autorisierungsrichtlinien für Zertifikate

Erstellen Sie im API Management-Gateway in der Richtliniendatei für die Verarbeitung von eingehendem Datenverkehr die folgenden Richtlinien.

Schaltfläche für die Richtlinie zur Verarbeitung von eingehendem Datenverkehr

Überprüfen des Fingerabdrucks eines Clientzertifikats

Jedes Clientzertifikat enthält einen Fingerabdruck. Dabei handelt es sich um einen Hash, der aus anderen Zertifikateigenschaften berechnet wird. Durch den Fingerabdruck wird sichergestellt, dass die Werte innerhalb des Zertifikats seit der Ausstellung durch die Zertifizierungsstelle nicht mehr geändert wurden. Sie können den Fingerabdruck in der Richtlinie überprüfen. Im folgenden Beispiel wird der Fingerabdruck des Zertifikats überprüft, das in der Anforderung übergeben wurde.

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

Überprüfen des Fingerabdrucks anhand von in API Management hochgeladenen Zertifikaten

Da im vorherigen Beispiel nur ein Fingerabdruck funktioniert, wurde auch nur ein Zertifikat überprüft. In der Regel übergibt jedoch jeder Kunde oder jedes Partnerunternehmen ein unterschiedliches Zertifikat mit einem unterschiedlichen Fingerabdruck. Rufen Sie für dieses Szenario die Zertifikate Ihrer Partner ab, und laden Sie sie im Azure-Portal über den Bereich Clientzertifikate in die API Management-Ressource hoch. Fügen Sie Ihrer Richtlinie anschließend den folgenden Code hinzu.

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

Überprüfen von Aussteller und Betreff eines Clientzertifikats

Im folgenden Beispiel werden Aussteller und Antragsteller des Zertifikats überprüft, das in der Anforderung übergeben wurde.

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