Aggiunta del supporto mTLS alle distribuzioni API

Scopri come utilizzare un criterio di richiesta per aggiungere il supporto mTLS alle distribuzioni API con API Gateway.

I gateway API creati con il servizio API Gateway sono protetti tramite cifratura e verifica TLS. Un gateway API presenta un certificato server a un client API durante un handshake TLS, consentendo al client API di convalidare l'autenticità del gateway API. Il processo del client API che autentica il gateway API è noto come TLS unidirezionale.

In molte situazioni, è sufficiente consentire ai client API autenticati di accedere a un'interfaccia API. In questi casi, si desidera che il gateway API convalidi l'autenticità di un client API verificando il certificato TLS presentato dal client API. Il processo del gateway API che autentica il client API è noto come mTLS (mutual TLS).

Con mTLS, sia il gateway API che il client API scambiano e verificano i certificati durante l'handshake TLS. Il gateway API verifica il certificato TLS presentato dal client API utilizzando certificati radice CA (Certificate Authority) personalizzati e bundle CA personalizzati di certificati radice e intermedi. Le CA e i bundle CA personalizzati vengono memorizzati nel truststore del gateway API, insieme a un bundle CA predefinito che contiene certificati di CA pubbliche ben note. In un handshake mTLS, il gateway API utilizza solo CA personalizzate e bundle CA personalizzati per verificare i certificati client API. Il gateway API non utilizza il bundle CA predefinito per verificare i certificati client API. Pertanto, se si desidera che un gateway API supporti mTLS, è necessario aggiungere CA e bundle CA personalizzati al truststore del gateway API (vedere Personalizzazione dei truststore per la verifica dei certificati TLS).

Per un controllo aggiuntivo, è inoltre possibile specificare che i certificati presentati dai client API a un gateway API devono contenere valori specifici nei campi Indirizzo e-mail, URL o Nome dominio del certificato. Se si specificano valori per questi campi durante l'impostazione di mTLS per un gateway API, il gateway API rifiuterà le richieste dei client API che presentano certificati che non li contengono. Se non si specificano valori per questi campi durante l'impostazione di mTLS, il gateway API accetterà tutte le richieste dei client API che forniscono il certificato valido. È possibile specificare fino a 10 valori per ogni distribuzione API.

Dopo un handshake mTLS riuscito tra il gateway API e un client API, una versione del certificato con codifica Base64 presentata dal client API viene salvata nella tabella di contesto request.cert come variabile di contesto denominata request.cert[client_base64]. Quando si definisce una distribuzione API, è possibile fare riferimento al certificato utilizzando il formato ${request.cert[client_base64]} (vedere Aggiunta di variabili di contesto ai criteri e alle definizioni backend HTTP). Si noti che se un client API presenta un certificato TLS di dimensioni superiori a 8 KB (dopo che è stato codificato con Base64), il certificato non viene salvato come variabile di contesto.

Utilizzare un criterio di richiesta nella specifica di distribuzione API per aggiungere il supporto mTLS a un'interfaccia API (vedere Aggiunta di criteri di richiesta e di risposta alle specifiche di distribuzione API). Il criterio di richiesta mTLS si applica a livello globale a tutti gli instradamenti in una specifica di distribuzione API.

Nota:
  • Se un client API presenta un certificato TLS a un gateway API e la distribuzione dell'API non è abilitata per mTLS, il gateway API ignora semplicemente il certificato TLS presentato. La variabile di contesto request.cert[client_base64] non è impostata in questa situazione.
  • Se un gateway API non è in grado di convalidare il certificato TLS presentato da un client API, il gateway API rifiuta la richiesta con un codice di risposta di stato di errore HTTP 401.
  • Se un gateway API utilizza un bundle CA personalizzato per convalidare il certificato TLS presentato da un client API, non è possibile attraversare più di tre certificati CA in qualsiasi punto della catena di certificati durante la convalida. In altre parole, per essere valido, un certificato CA nella catena deve essere firmato direttamente da una CA personalizzata presente nel truststore del gateway API oppure non deve trovarsi a più di due certificati intermedi da un certificato firmato da tale CA personalizzata. Contattaci se si desidera consentire più certificati intermedi.

È possibile aggiungere un criterio di richiesta mTLS a una specifica di distribuzione API effettuando le operazioni riportate di seguito.

  • utilizzo di Console
  • modifica di un file JSON

Utilizzo della console per aggiungere criteri di richiesta mTLS

Per aggiungere un criterio di richiesta mTLS a una specifica di distribuzione API utilizzando la console:

  1. Creare o aggiornare una distribuzione API utilizzando la console, selezionare l'opzione Da zero e immettere i dettagli nella pagina Informazioni di base.

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  2. Nella sezione Criteri di richiesta API della pagina Informazioni di base, in Mutual-TLS selezionare l'opzione Abilita mTLs e, facoltativamente, specificare:

    • SAN (Subject Alternative Name) / Common Name: valori che devono essere visualizzati in uno o più dei seguenti campi del certificato presentato dal client API per consentire al gateway API di accettare le richieste dal client:
      • Indirizzo e-mail
      • URL
      • Nome dominio

      Ad esempio, example.com. È possibile specificare fino a 10 valori. Se si specificano valori durante l'impostazione di mTLS per una distribuzione API, il gateway API rifiuterà le richieste dei client API che presentano certificati che non li contengono. Se non si specificano valori durante l'impostazione di mTLS, il gateway API accetterà tutte le richieste dei client API che forniscono il certificato valido.

  3. Fare clic su Rivedi per esaminare i dettagli immessi per la distribuzione dell'API.
  4. Fare clic su Crea o su Salva modifiche per creare o aggiornare la distribuzione API.
  5. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).

Modifica di un file JSON per aggiungere criteri di richiesta mTLS

Per aggiungere un criterio di richiesta mTLS a una specifica di distribuzione API in un file JSON, effettuare le operazioni riportate di seguito.

  1. Utilizzando l'editor JSON preferito, modificare la specifica di distribuzione API esistente alla quale si desidera aggiungere il supporto mTLS o creare una nuova specifica di distribuzione API (vedere Creazione di una specifica di distribuzione API).

    Ad esempio, la seguente specifica di distribuzione API di base definisce una semplice funzione serverless Hello World in Funzioni OCI come un singolo backend:

    {
      "routes": [
        {
          "path": "/hello",
          "methods": ["GET"],
          "backend": {
            "type": "ORACLE_FUNCTIONS_BACKEND",
            "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
          }
        }
      ]
    }
  2. Per specificare un criterio di richiesta mTLS che si applica a livello globale a tutti gli instradamenti in una distribuzione API, effettuare le operazioni riportate di seguito.

    1. Se non esiste già, inserire una sezione requestPolicies prima della sezione routes. Ad esempio:

      {
        "requestPolicies": {},
        "routes": [
          {
            "path": "/hello",
            "methods": ["GET"],
            "backend": {
              "type": "ORACLE_FUNCTIONS_BACKEND",
              "functionId": "ocid1.fnfunc.oc1.phx.aaaaaaaaab______xmq"
            }
          }
        ]
      }
    2. Aggiungere il seguente criterio mutualTLS alla nuova sezione requestPolicies da applicare a livello globale a tutti gli instradamenti in una distribuzione API:

      {
        "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"
            }
          }
        ]
      }

      dove:

      • "isVerifiedCertificateRequired": true|false è true o false, che indica se mTLS è abilitato per la distribuzione dell'API. Se non viene specificato, il valore predefinito è false.
      • "allowedSans": [<list-of-values>] è un elenco facoltativo di valori separati da virgole che devono essere visualizzati in uno o più dei seguenti campi del certificato presentato dal client API affinché il gateway API accetti le richieste del client:
        • Indirizzo e-mail
        • URL
        • Nome dominio

        Ad esempio, example.com. È possibile specificare fino a 10 valori. Se si specificano valori durante l'impostazione di mTLS per una distribuzione API, il gateway API rifiuterà le richieste dei client API che presentano certificati che non li contengono. Se non si specificano valori durante l'impostazione di mTLS, il gateway API accetterà tutte le richieste dei client API che forniscono il certificato valido.

      Ad esempio:

      {
        "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. Salvare il file JSON contenente la specifica di distribuzione API.
  4. Utilizzare la specifica di distribuzione API quando si crea o si aggiorna una distribuzione API nei modi riportati di seguito.

    • specificando il file JSON nella console quando si seleziona l'opzione Carica un'interfaccia API esistente
    • specificando il file JSON in una richiesta all'API REST del gateway API

    Per ulteriori informazioni, vedere Distribuzione di un'interfaccia API in un gateway API mediante la creazione di una distribuzione API e Aggiornamento di un gateway API o di una distribuzione API.

  5. (Facoltativo) Confermare che l'interfaccia API sia stata distribuita correttamente chiamandola (vedere Chiamata di un'interfaccia API distribuita in un gateway API).