Verwenden von Clientzertifikaten zum Schutz des Zugriffs auf eine API
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.
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.
Ü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>