mTLS-Support zu API-Deployments hinzufügen

Erfahren Sie, wie Sie mit einer Anforderungs-Policy mTLS-Unterstützung zu API-Deployments mit API Gateway hinzufügen.

Die API-Gateways, die Sie mit dem API-Gateway-Service erstellen, sind durch TLS-Verschlüsselung und -Verifizierung gesichert. Ein API-Gateway stellt einem API-Client während eines TLS-Handshakes ein Serverzertifikat zur Verfügung, sodass der API-Client die Authentizität des API-Gateways validieren kann. Der Prozess des API-Clients, der das API-Gateway authentifiziert, wird als einseitige TLS bezeichnet.

In vielen Fällen möchten Sie nur authentifizierten API-Clients den Zugriff auf eine API ermöglichen. In diesen Fällen soll das API-Gateway die Authentizität eines API-Clients validieren, indem es das vom API-Client vorgestellte TLS-Zertifikat überprüft. Der Prozess des API-Gateways, das den API-Client authentifiziert, wird als gegenseitiges TLS (mTLS) bezeichnet.

Mit mTLS tauschen sowohl das API-Gateway als auch der API-Client Zertifikate aus und prüfen sie während des TLS-Handshakes. Das API-Gateway überprüft das vom API-Client vorgelegte TLS-Zertifikat mit benutzerdefinierten Certificate Authority-(CA-)Root-Zertifikaten und benutzerdefinierten CA-Bundles mit Root- und Zwischenzertifikaten. Die benutzerdefinierten CAs und CA-Bundles werden zusammen mit einem Standard-CA-Bundle, das Zertifikate bekannter öffentlicher CAs enthält, im Truststore des API-Gateways gespeichert. Beachten Sie, dass das API-Gateway bei einem mTLS-Handshake nur benutzerdefinierte CAs und benutzerdefinierte CA-Bundles verwendet, um API-Clientzertifikate zu prüfen. Das API-Gateway verwendet nicht das Standard-CA-Bundle, um API-Clientzertifikate zu prüfen. Wenn also ein API-Gateway mTLS unterstützen soll, müssen Sie dem Truststore des API-Gateways benutzerdefinierte CAs und CA-Bundles hinzufügen (siehe Trust Stores für TLS-Zertifikatsverifizierung anpassen).

Für zusätzliche Kontrolle können Sie auch angeben, dass Zertifikate, die von API-Clients für ein API-Gateway bereitgestellt werden, bestimmte Werte in den Feldern "E-Mail-Adresse", "URL" oder "Domainname" des Zertifikats enthalten müssen. Wenn Sie beim Einrichten von mTLS für ein API-Gateway Werte für diese Felder angeben, lehnt das API-Gateway Anforderungen von API-Clients ab, die Zertifikate präsentieren, die sie nicht enthalten. Wenn Sie beim Einrichten von mTLS keine Werte für diese Felder angeben, akzeptiert das API-Gateway alle Anforderungen von API-Clients, die angeben, dass das Zertifikat gültig ist. Sie können standardmäßig bis zu 10 Werte für jedes API-Deployment angeben (Sie können dieses interne Limit ändern).

Nach einem erfolgreichen mTLS-Handshake zwischen dem API-Gateway und einem API-Client wird eine Base64-codierte Version des vom API-Client dargestellten Zertifikats in der Kontexttabelle request.cert als Kontextvariable mit dem Namen request.cert[client_base64] gespeichert. Wenn Sie ein API-Deployment definieren, können Sie das Zertifikat im Format ${request.cert[client_base64]} referenzieren (siehe Kontextvariablen zu Policys und HTTP-Backend-Definitionen hinzufügen). Wenn ein API-Client ein TLS-Zertifikat mit einer Größe von mehr als 8 KB darstellt (nachdem es Base64-codiert wurde), wird das Zertifikat nicht als Kontextvariable gespeichert.

Mit einer Anforderungs-Policy in der API-Deployment-Spezifikation können Sie einer API mTLS-Unterstützung hinzufügen (siehe Anforderungs-Policys und Antwort-Policys zu API-Deployment-Spezifikationen hinzufügen). Die mTLS-Anforderungs-Policy gilt global für alle Routen in einer API-Deployment-Spezifikation.

Beachten Sie dabei Folgendes:
  • Wenn ein API-Client ein TLS-Zertifikat für ein API-Gateway bereitstellt und das API-Deployment nicht mTLS-fähig ist, ignoriert das API-Gateway einfach das vorgestellte TLS-Zertifikat. Die Kontextvariable request.cert[client_base64] ist in dieser Situation nicht festgelegt.
  • Wenn ein API-Gateway das von einem API-Client vorgestellte TLS-Zertifikat nicht validieren kann, lehnt das API-Gateway die Anforderung mit einem HTTP 401-Fehlerstatusantwortcode ab.
  • Wenn ein API-Gateway ein benutzerdefiniertes CA-Bundle zur Validierung des von einem API-Client präsentierten TLS-Zertifikats verwendet, können während der Validierung nicht mehr als drei CA-Zertifikate an einem beliebigen Punkt in der Zertifikatskette durchlaufen werden. Mit anderen Worten: Um gültig zu sein, muss ein CA-Zertifikat in der Kette entweder selbst direkt von einer benutzerdefinierten CA signiert werden, die im Truststore des API-Gateways vorhanden ist, oder höchstens zwei Zwischenzertifikate von einem Zertifikat entfernt sein, das von einer solchen benutzerdefinierten CA signiert wurde. Kontaktieren Sie uns, wenn Sie weitere Zwischenzertifikate zulassen möchten.

Sie können eine mTLS-Anforderungs-Policy zu einer API-Deployment-Spezifikation hinzufügen, indem Sie:

  • die Konsole verwenden
  • eine JSON-Datei bearbeiten

mTLS-Anforderungs-Policys mit der Konsole hinzufügen

So fügen Sie mit der Konsole eine mTLS-Anforderungs-Policy zu einer API-Deploymentspezifikation hinzu:

  1. Erstellen oder aktualisieren Sie ein API-Deployment mit der Konsole, wählen Sie die Option Völlig neu aus, und geben Sie auf der Seite Basisinformationen Details ein.

    Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.

  2. Wählen Sie auf der Seite Basisinformationen im Abschnitt API-Anforderungs-Policys unter Mutual-TLS die Option mTLs aktivieren aus, und geben Sie optional Folgendes an:

    • Subject Alternative Name (SAN) / Common Name: Werte, die in mindestens einem der folgenden Felder des Zertifikats angezeigt werden müssen, das vom API-Client bereitgestellt wird, damit das API-Gateway Anforderungen vom Client akzeptiert:
      • E-Mail-Adresse
      • URL
      • Domainname

      Beispiel: example.com. Sie können standardmäßig bis zu 10 Werte angeben (Sie können dieses interne Limit ändern). Bei der Validierung wird die Groß-/Kleinschreibung nicht beachtet.

      Sie können am Anfang und/oder am Ende jedes Werts einen Sternchen (*) als Platzhalter verwenden, um Null, ein oder mehrere Zeichen darzustellen. Sie können keinen Sternchen-Platzhalter in der Mitte des Wertes einfügen. Beispiel:

      • *.example.com entspricht server.example.com
      • server.example.* entspricht server.example.com
      • *.example.* entspricht server.example.com
      • server.*.com stimmt nicht mit server.example.com überein, da sich der Platzhalter nicht in der Mitte des Wertes befinden kann

      Wenn Sie beim Einrichten von mTLS für ein API-Deployment Werte angeben, lehnt das API-Gateway Anforderungen von API-Clients ab, die Zertifikate enthalten, die sie nicht enthalten. Wenn Sie beim Einrichten von mTLS keine Werte angeben, akzeptiert das API-Gateway alle Anforderungen von API-Clients, sofern das Zertifikat gültig ist.

  3. Wählen Sie Prüfen aus, um die Details zu prüfen, die Sie für das API-Deployment eingegeben haben.
  4. Wählen Sie Erstellen oder Änderungen speichern aus, um das API-Deployment zu erstellen oder zu aktualisieren.
  5. (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).

JSON-Datei zum Hinzufügen von mTLS-Anforderungs-Policys bearbeiten

So hinzufügen Sie eine mTLS-Anforderungs-Policy zu einer API-Deployment-Spezifikation in einer JSON-Datei:

  1. Bearbeiten Sie mit Ihrem bevorzugten JSON-Editor die vorhandene API-Deploymentspezifikation, der Sie mTLS-Support hinzufügen möchten, oder erstellen Sie eine neue API-Deploymentspezifikation (siehe API-Deployment-Spezifikation erstellen).

    Beispiel: Die folgende Basisspezifikation für das API-Deployment definiert eine einfache serverlose Hello World-Funktion in OCI Functions als einzelnes Backend:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. So geben Sie eine mTLS-Anforderungs-Policy an, die global für alle Routen in einem API-Deployment gilt:

    1. Fügen Sie, falls noch nicht vorhanden, einen requestPolicies-Abschnitt vor dem routes-Abschnitt ein. Beispiel:

      {
        "requestPolicies": {},
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            }
          }
        ]
      }
    2. Fügen Sie die folgende mutualTLS-Policy zum Abschnitt requestPolicies hinzu, um sie global auf alle Routen in einem API-Deployment anzuwenden:

      {
        "requestPolicies": {
          "mutualTls":{
            "isVerifiedCertificateRequired": true|false,
            "allowedSans": [<list-of-values>]
          }
        },
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            }
          }
        ]
      }

      Dabei gilt:

      • "isVerifiedCertificateRequired": true|false ist entweder true oder false, was angibt, ob mTLS für das API-Deployment aktiviert ist. Wenn keine Angabe gemacht wird, wird standardmäßig false verwendet.
      • "allowedSans": [<list-of-values>] ist eine optionale kommagetrennte Werteliste, die in mindestens einem der folgenden Felder des Zertifikats angezeigt werden muss, das vom API-Client bereitgestellt wird, damit das API-Gateway Anforderungen vom Client akzeptiert:
        • E-Mail-Adresse
        • URL
        • Domainname

        Beispiel: example.com. Sie können standardmäßig bis zu 10 Werte angeben (Sie können dieses interne Limit ändern). Bei der Validierung wird die Groß-/Kleinschreibung nicht beachtet.

        Sie können am Anfang und/oder am Ende jedes Werts einen Sternchen (*) als Platzhalter verwenden, um Null, ein oder mehrere Zeichen darzustellen. Sie können keinen Sternchen-Platzhalter in der Mitte des Wertes einfügen. Beispiel:

        • *.example.com entspricht server.example.com
        • server.example.* entspricht server.example.com
        • *.example.* entspricht server.example.com
        • server.*.com stimmt nicht mit server.example.com überein, da sich der Platzhalter nicht in der Mitte des Wertes befinden kann

        Wenn Sie beim Einrichten von mTLS für ein API-Deployment Werte angeben, lehnt das API-Gateway Anforderungen von API-Clients ab, die Zertifikate enthalten, die sie nicht enthalten. Wenn Sie beim Einrichten von mTLS keine Werte angeben, akzeptiert das API-Gateway alle Anforderungen von API-Clients, sofern das Zertifikat gültig ist.

      Beispiel:

      {
        "requestPolicies": {
          "mutualTls":{
            "isVerifiedCertificateRequired": true,
            "allowedSans": [
              "example.com",
              "example.co.uk"
            ]
          }
        },
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            }
          }
        ]
      }
  3. Speichern Sie die JSON-Datei, die die API-Deployment-Spezifikation enthält.
  4. Verwenden Sie die API-Deployment-Spezifikation, wenn Sie ein API-Deployment wie folgt erstellen oder aktualisieren:

    • Durch Angabe der JSON-Datei in der Konsole bei Auswahl der Option Vorhandene API hochladen
    • Durch Angabe der JSON-Datei in einer Anforderung an die REST-API von API-Gateway

    Weitere Informationen finden Sie unter API durch das Erstellen eines API-Deployment in einem API-Gateway bereitstellen und API-Gateway aktualisieren.

  5. (Optional) Bestätigen Sie, dass die API erfolgreich bereitgestellt wurde, indem Sie sie aufrufen (siehe In einem API-Gateway bereitgestellte API aufrufen).