# Configure e associe um certificado mTLS

import Tag from '~/components/webkit/Tag.vue'
import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

import Apiv4Rollout from '~/includes/snippets/apiv4Rollout/pt/snippet.mdx'

<Apiv4Rollout />


O [Mutual Transport Layer Security (mTLS)](/pt-br/documentacao/produtos/secure/firewall/mtls/) é um protocolo de segurança que permite autenticação e criptografia de duas vias para interações de rede. Ele confirma que tanto o cliente quanto o servidor estão autenticados e têm autorização para comunicação efetiva.

Para configurar o mTLS em suas aplicações, você precisa de um [digital certificate](/pt-br/documentacao/produtos/guias/secure/certificado-digital/) com suporte a mTLS assinado por uma autoridade certificadora, ou Certificate Authority (CA). Na Azion, este tipo de certificado é chamado de **Trusted CA**.

Existem instruções separadas para API v3 usando configurações de [Domains legadas](/pt-br/documentacao/produtos/build/applications/domains/) e API v4 usando o novo produto [Workloads](/pt-br/documentacao/produtos/secure/workloads).

:::tip
Neste guia, há instruções separadas para API v3 e API v4. Se você não tem certeza de quais etapas se aplicam à sua conta, consulte [o guia Verificar Migração da Conta](/pt-br/documentacao/produtos/guias/verificar-migracao-conta/) para determinar se sua conta já foi migrada.
:::


---

## Adicione um Trusted CA e associe a um domínio

<Tabs client:visible>
    <Fragment slot="tab.consoleworkloads">Console - Workloads</Fragment>
    <Fragment slot="tab.consoledomains">Console - Domains</Fragment>
    <Fragment slot="tab.apiv3">API v3</Fragment>
    <Fragment slot="tab.apiv4">API v4</Fragment>

<Fragment slot="panel.consoleworkloads">

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Certificate Manager**.
2. Clique no botão **+ Digital Certificate**.
3. Dê um nome fácil de lembrar para o seu certificado.
4. Selecione a opção **Import Trusted CA Certificate**.
5. No campo **Private Certificate**, cole o seu Trusted CA, incluindo as tags de início e fim.

:::caution[atenção]
O arquivo do certificado deve estar no formato Privacy Enhanced Mail (PEM), que termina com a extensão de arquivo `.pem`. Certificados em outros formatos não são aceitos.
:::

6. Clique no botão **Save**.

Após adicionar um **Trusted CA** à sua biblioteca de certificados, você precisa configurar quais domínios devem operar com mTLS.

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Workloads**.
2. Clique no workload que você deseja configurar o **mTLS**.
3. Ative o switch **Mutual Authentication**.
4. Escolha o modo de verificação que deseja usar.
  - Ao selecionar **Enforce** (padrão), o mTLS é ativado no domínio de sua application e todo o tráfego de entrada estará em conformidade com a autenticação do cliente e do servidor.
  - Ao selecionar **Permissive**, você deve [configurar este modo no Firewall](#crie-regras-especificas-para-permissive-mtls).
5. Selecione o **Trusted CA Certificate** que você criou.
6. Clique no botão **Save**.

:::caution[atenção]
O modo **Permissive** é recomendado ao testar o acesso à sua aplicação em condições específicas. A má configuração do modo de verificação **Permissive** pode resultar em falhas de segurança.
:::

</Fragment>

<Fragment slot="panel.consoledomains">

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Certificate Manager**.
2. Clique no botão **+ Digital Certificate**.
3. Dê um nome fácil de lembrar para o seu certificado.
4. Selecione a opção **Import Trusted CA Certificate** no menu suspenso.
5. No campo **Private Certificate**, cole o seu certificado, incluindo as tags de início e fim.

:::caution[atenção]
O arquivo do certificado deve estar no formato Privacy Enhanced Mail (PEM), que termina com a extensão de arquivo `.pem`. Certificados em outros formatos não são aceitos.
:::

6. Clique no botão **Save**.

Após adicionar um **Trusted CA** à sua biblioteca de certificados, você precisa configurar quais domínios devem operar com mTLS.

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Domains**.
2. Clique no domínio que deseja configurar o **mTLS**.
3. Ative o switch **Mutual Authentication**.
4. Escolha o modo de verificação que deseja usar.
   - Ao selecionar **Enforce** (padrão), o mTLS é ativado no domínio de sua application e todo o tráfego de entrada estará em conformidade com a autenticação do cliente e do servidor.
   - Ao selecionar **Permissive**, você deve [configurar este modo no Firewall](#crie-regras-especificas-para-permissive-mtls).
5. Selecione o **Trusted CA Certificate** que você criou.
6. Clique no botão **Save**.

:::caution[Atenção]
O modo **Permissive** é recomendado ao testar o acesso à sua aplicação em condições específicas. A má configuração do modo de verificação **Permissivo** pode resultar em falhas de segurança.
:::
</Fragment>

<Fragment slot="panel.apiv4">

1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [token pessoal](/pt-br/documentacao/produtos/guias/personal-tokens/) e o certificado na propriedade `certificate`:

<Code lang="bash" code={`
curl --request POST \
  --url https://api.azion.com/v4/digital_certificates/certificates \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "Trusted CA - mydomain.com",
    "type": "trusted_ca_certificate",
    "certificate": "-----BEGIN CERTIFICATE-----\nMIIDCTCCAfGgAwIBAgIJAPpKHOLMIGuAMA0GCSqGSIb3DQEBBQUAMBsxGTAXBgNV\nBAMMEHd3dy5teWRvbWFpbi5jb20wHhcNMTgwMzI3MjAwOTA0WhcNMjgwMzI0MjAw\nOTA0WjAbMRkwFwYDVQQDDBB3d3cubXlkb21haW4uY29tMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAt25cziDBsHbZzZhy9BPLApPf9OmE67k9pr7VezsR\nkIw4trY2xtJXFB7itT1p7HxbLBoL5u8FGmMKssB+XTmztmgty43ogor1KSjUgfZg\nrpAqyXtrbSM5g+14c0VO9S0LkkePlHvul0UiblJj7K+gkvc6sZqXZY+TI1BPqeuO\ns9A4LLCUGziyNv0qJfIL5RZm07Yy35BEBTTxUWVL2msfaUH2uPM5XN5eFC7oKN0/\n3NuYIboRmyk+P7CDC99M8Mp/wOjiB+yVGZVTjeqGPI8nFWJl2wtyuiZ4VvW84xQP\njwtid1v1KENK/ixMAAXi2cQ9gNRX+/USoneuWj5n4QUj6QIDAQABo1AwTjAdBgNV\nHQ4EFgQU2sDgtyYMDXvw79OhdvAFqcLmcwkwHwYDVR0jBBgwFoAU2sDgtyYMDXvw\n79OhdvAFqcLmcwkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAKzCM\niG67IPwJK6MIJ31N734AofjkOf+fffxNtfYmH0XGORHPYUxCxsLxXiSFgPvubWh+\n7vLsKAm67bflMWbn982aiOR0O/LJhLvhj6F+wgv0aDYup181Hm8Ob/88ldbF6ND1\nTqzVATS0WDfl+z1QBKtNdDm3Nv45IZ83ob7OhIzD9MwL6tflBPDpWOYtmBDn0xSP\n6ra9d8oa6jK1fe2/5A7LY41acjbbNrLbFDYP7hcx02TmCfSMut+ysaZ/blay4Sbb\nwNlt92KhJw07UEKgXXbgyXGoFQkU8V+r2AZcgt0XM9jvwTc01Sbq/gegd2GMAj3x\nrTwkn5UNzFs56FCgNg==\n-----END CERTIFICATE-----",
    "active": true
  }'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da instância do certificado |
| `certificate` | String que contém o valor do certificado, devendo incluir as tags de início e fim. As quebras de linha devem ser substituídas por sequências de escape (`\n`) |
| `type` | Enum que indica o tipo do certificado. Certificados do tipo Trusted CA são atribuídos o valor `trusted_ca_certificate` |

2. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`
{
    "results": {
        "id": <digital_certificate_id>,
        "name": "Trusted CA - mydomain.com",
        "issuer": "CA name",
        "subject_name": [],
        "validity": "2028-03-24 20:09:00-03:00",
        "status": "Active",
        "certificate_type": "trusted_ca_certificate",
        "managed": false
    }
}
`} />

3. Copie o valor `digital_certificate_id`. Você precisará dele ao associá-lo a um Workload.
4. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [token pessoal](/pt-br/documentacao/produtos/guias/personal-tokens/), o `<application_id>` por um ID de application, e o `<digital_certificate_id>` pelo ID do Trusted CA que você criou:

<Code lang="bash" code={`
curl --request POST \
  --url https://api.azion.com/v4/workspace/workloads \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
    "name": "mydomain.com",
    "active": true,
    "infrastructure": 1,
    "domains": ["mydomain.com"],
    "protocols": {
      "http": {
        "versions": ["http1", "http2"],
        "http_ports": [80],
        "https_ports": [443]
      }
    },
    "mtls": {
      "verification": "enforce",
      "certificate": <digital_certificate_id>
    },
    "workload_domain_allow_access": true
  }'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da instância do domínio |
| `cnames` | Aceita um array de strings contendo os CNAMEs para o domínio como valores |
| `digital_certificate_id` | Enum que, quando `null`, seleciona o certificado **Azion SAN** |
| `edge_application_id` | O [ID da aplicação](/pt-br/documentacao/produtos/guias/build/criar-uma-aplicacao/) vinculada ao domínio |
| `is_mtls_enabled` | Booleano que, quando `true`, ativa a verificação mTLS para o domínio |
| `mtls_verification` | Enum que define o modo de verificação. Pode ser `enforce` ou `permissive` |
| `mtls_trusted_ca_certificate_id` | O [ID do Trusted CA](#adicione-um-trusted-ca-e-associe-a-um-dominio) |

5. Você receberá uma resposta semelhante a esta:

<Code lang="json" code={`
{
  "state": "executed",
  "data": {
    "id": 987654321,
    "name": "mydomain.com",
    "active": true,
    "last_editor": "api_user@example.com",
    "last_modified": "2025-08-20T12:34:56Z",
    "infrastructure": 1,
    "tls": {
      "certificate": null,
      "minimum_version": "tls_1_2",
      "ciphers": 4
    },
    "protocols": {
      "http": {
        "versions": ["http1", "http2"],
        "http_ports": [80],
        "https_ports": [443],
        "quic_ports": []
      }
    },
    "mtls": {
      "verification": "enforce",
      "certificate": 123456789,
      "crl": []
    },
    "domains": ["mydomain.com"],
    "workload_domain_allow_access": true,
    "workload_domain": "",
    "product_version": "1.0"
  }
}
`} />


6. Execute a seguinte requisição `POST` no seu terminal para vincular seu novo workload a uma application, substituindo `[TOKEN VALUE]` pelo seu [token pessoal](/pt-br/documentacao/produtos/guias/personal-tokens/), o `<application_id>` por um ID de application, e o `<workload_id>` pelo ID do workload que você criou:

<Code lang="bash" code={`
curl --request POST \
  --url https://api.azion.com/v4/workspace/workloads/<workload_id>/deployments \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "My Workload Deployment",
  "current": true,
  "active": true,
  "strategy": {
    "type": "string",
    "attributes": {
      "edge_application": <application_id>,
    }
  }
}'

`} />

7. Aguarde o tempo de propagação. Seu domínio agora deve estar usando o protocolo mTLS.

</Fragment>

<Fragment slot="panel.apiv3">
1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e o certificado na propriedade `certificate`:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/digital_certificates' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
    "name": "Trusted CA - mydomain.com",
    "certificate": "-----BEGIN CERTIFICATE-----\nMIIDCTCCAfGgAwIBAgIJAPpKHOLMIGuAMA0GCSqGSIb3DQEBBQUAMBsxGTAXBgNV\nBAMMEHd3dy5teWRvbWFpbi5jb20wHhcNMTgwMzI3MjAwOTA0WhcNMjgwMzI0MjAw\nOTA0WjAbMRkwFwYDVQQDDBB3d3cubXlkb21haW4uY29tMIIBIjANBgkqhkiG9w0B\nAQEFAAOCAQ8AMIIBCgKCAQEAt25cziDBsHbZzZhy9BPLApPf9OmE67k9pr7VezsR\nkIw4trY2xtJXFB7itT1p7HxbLBoL5u8FGmMKssB+XTmztmgty43ogor1KSjUgfZg\nrpAqyXtrbSM5g+14c0VO9S0LkkePlHvul0UiblJj7K+gkvc6sZqXZY+TI1BPqeuO\ns9A4LLCUGziyNv0qJfIL5RZm07Yy35BEBTTxUWVL2msfaUH2uPM5XN5eFC7oKN0/\n3NuYIboRmyk+P7CDC99M8Mp/wOjiB+yVGZVTjeqGPI8nFWJl2wtyuiZ4VvW84xQP\njwtid1v1KENK/ixMAAXi2cQ9gNRX+/USoneuWj5n4QUj6QIDAQABo1AwTjAdBgNV\nHQ4EFgQU2sDgtyYMDXvw79OhdvAFqcLmcwkwHwYDVR0jBBgwFoAU2sDgtyYMDXvw\n79OhdvAFqcLmcwkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAKzCM\niG67IPwJK6MIJ31N734AofjkOf+fffxNtfYmH0XGORHPYUxCxsLxXiSFgPvubWh+\n7vLsKAm67bflMWbn982aiOR0O/LJhLvhj6F+wgv0aDYup181Hm8Ob/88ldbF6ND1\nTqzVATS0WDfl+z1QBKtNdDm3Nv45IZ83ob7OhIzD9MwL6tflBPDpWOYtmBDn0xSP\n6ra9d8oa6jK1fe2/5A7LY41acjbbNrLbFDYP7hcx02TmCfSMut+ysaZ/blay4Sbb\nwNlt92KhJw07UEKgXXbgyXGoFQkU8V+r2AZcgt0XM9jvwTc01Sbq/gegd2GMAj3x\nrTwkn5UNzFs56FCgNg==\n-----END CERTIFICATE-----",
    "certificate_type": "trusted_ca_certificate"
}'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da instância do certificado |
| `certificate` | String que contém o valor do certificado. Deve incluir as tags de início e fim. As quebras de linha devem ser substituídas por sequências de escape (`\n`) |
| `certificate_type` | Enum que indica o tipo do certificado. Certificados do tipo **Trusted CA** são atribuídos o valor `trusted_ca_certificate` |

2. Você receberá uma resposta semelhante a esta:

```json
{
    "results": {
        "id": <digital_certificate_id>,
        "name": "Trusted CA - mydomain.com",
        "issuer": "CA name",
        "subject_name": [],
        "validity": "2028-03-24 20:09:00-03:00",
        "status": "Active",
        "certificate_type": "trusted_ca_certificate",
        "managed": false
    }
}
```

3. Copie o valor `digital_certificate_id`. Ele será usado para associar o certificado a um domínio.
4. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/), a `<application_id>` por um ID de application, e `<digital_certificate_id>` pelo ID do **Trusted CA** que você criou:

```bash
curl --location 'https://api.azionapi.net/domains' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
    "name": "mydomain.com",
    "cnames": [
        "mydomain.com"
    ],
    "digital_certificate_id": null,
    "edge_application_id": <application_id>,
    "is_mtls_enabled": true,
    "mtls_verification": "enforce",
    "mtls_trusted_ca_certificate_id": <digital_certificate_id>
}'
```

| Chave | Descrição |
| --- | --- |
| `name` | Nome da instância do domínio |
| `cnames` | Aceita um array de strings contendo os CNAMEs para o domínio como valores |
| `digital_certificate_id` | Enum que, quando `null`, seleciona o certificado **Azion SAN** |
| `edge_application_id` | O [ID da aplicação](/pt-br/documentacao/produtos/guias/build/criar-uma-aplicacao/) vinculada ao domínio |
| `is_mtls_enabled` | Booleano que, quando `true`, ativa a verificação mTLS para o domínio |
| `mtls_verification` | Enum que define o modo de verificação. Pode ser `enforce` ou `permissive` |
| `mtls_trusted_ca_certificate_id` | O [ID do Trusted CA](#adicionar-um-trusted-ca-e-associar-a-um-dominio) |

5. Você receberá uma resposta semelhante a esta:

```json
{
    "id": <domain_id>,
    "name": "mydomain.com",
    "cnames": [
        "mydomain.com"
    ],
    "cname_access_only": true,
    "digital_certificate_id": null,
    "edge_application_id": <application_id>,
    "is_active": true,
    "domain_name": "abcde12345.map.azionedge.net",
    "environment": "production",
    "is_mtls_enabled": true,
    "mtls_verification": "enforce",
    "mtls_trusted_ca_certificate_id": <digital_certificate_id>,
    "edge_firewall_id": null
}
```

6. Aguarde o tempo de propagação. Seu domínio agora deve estar usando o protocolo mTLS.
</Fragment>

</Tabs>

---

## Crie regras específicas para Permissive mTLS

Para configurar um firewall para bloquear o acesso a um domínio usando o modo **Permissive** do mTLS, você deve usar o [Rules Engine para Firewall](/pt-br/documentacao/produtos/secure/firewall/rules-engine/). O exemplo a seguir descreve um conjunto de regras que bloqueará qualquer tráfego de rede de entrada com o hostname `mydomain.com` cuja validação do certificado do cliente não seja efetuada, entregando um erro `403 Forbidden`.

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Firewall**.
2. [Configure um firewall](/pt-br/documentacao/produtos/guias/secure/firewall-definir-main-settings/) para o domínio mTLS.
3. Clique na aba **Rules Engine**.
4. Clique no botão **+ Rules Engine**.
5. Dê um nome fácil de lembrar para sua regra.
6. Na seção **Criteria**, como variável, selecione **Host**.
7. Como operador de comparação, selecione **is equal**.
8. Como argumento, insira `mydomain.com`.
9. Clique no botão **+ And** para adicionar um novo critério.
10. Como variável, selecione **Client Certificate Validation**.
11. Como operador de comparação, selecione **is not equal**.
12. Como argumento, insira `true`.
13. Na seção **Behavior**, selecione **Deny (403 Forbidden)**.
14. Clique no botão **Save**.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e o `<edge_firewall_id>` pelo ID do firewall associado ao domínio mTLS:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_firewall/<edge_firewall_id>/rules_engine' \
--header 'Accept: application/json; version=3' \
--header 'Authorization: Token [TOKEN VALUE]' \
--header 'Content-Type: application/json' \
--data '{
    "name": "403 Host=mydomain.com and CCV!=true",
    "description": "Delivers a 403 if the hostname does not match mydomain.com and if the certificate validation fails.",
    "behaviors": [
        {
            "name": "deny"
        }
    ],
    "criteria": [
        [
            {
                "variable": "host",
                "operator": "is_equal",
                "conditional": "if",
                "argument": "mydomain.com"
            },
            {
                "variable": "client_certificate_validation",
                "operator": "is_not_equal",
                "conditional": "and",
                "argument": "true"
            }
        ]
    ]
}'
`} />

| Chave | Descrição |
| --- | --- |
| `name` | Nome da regra |
| `description` | Descrição da regra |
| `behaviors` | Array que armazena objetos que definem comportamentos |
| `criteria` | Array que armazena objetos que definem critérios |

2. Você receberá uma resposta semelhante a esta:

```json
{
  "results": {
      "name": "403 Host=mydomain.com and CCV!=true",
      "description": "Delivers a 403 if the hostname does not match mydomain.com and if the certificate validation fails.",
      "behaviors": [
          {
              "name": "deny"
          }
      ],
      "criteria": [
          [
              {
                  "variable": "host",
                  "operator": "is_equal",
                  "conditional": "if",
                  "argument": "mydomain.com"
              },
              {
                  "variable": "client_certificate_validation",
                  "operator": "is_not_equal",
                  "conditional": "and",
                  "argument": "true"
              }
          ]
      ],
      "id": <rule_set_id>,
      "order": 0
  }
}
```
</Fragment>

</Tabs>

---

## Especifique variáveis mTLS em cabeçalhos HTTP

Para especificar variáveis mTLS em cabeçalhos HTTP, você deve usar o [Rules Engine para Application](/pt-br/documentacao/produtos/build/applications/rules-engine/). O exemplo a seguir descreve um conjunto de regras que adicionará a variável `${ssl_client_escaped_cert}` ao cabeçalho da sua aplicação.

Requer:
- <Tag severity="info">[Application Accelerator](/pt-br/documentacao/produtos/guias/build/definir-configuracoes-principais/#modulos)</Tag>
- <Tag severity="info">[Dominio com certificado mTLS](#adicione-um-trusted-ca-e-associe-a-um-dominio)</Tag>

:::tipcs
Você também pode inserir cabeçalhos com outras variáveis da [lista de variáveis mTLS disponíveis](/pt-br/documentacao/produtos/build/applications/rules-engine/#variaveis-mtls).
:::

Para testar se os cabeçalhos que você adicionou estão sendo enviados nas requisições, você pode executar o seguinte comando cURL no seu terminal a partir de um diretório que contém os arquivos `.pem` do seu Trusted CA e sua chave privada:

```bash
curl -skv https://mydomain.com/ -H "Pragma: azion-debug-cache" -o /dev/stdout --cert cert.pem --key key.pem
```

<Tabs client:visible>
    <Fragment slot="tab.console">Console</Fragment>
    <Fragment slot="tab.api">API</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Application**.
2. Encontre e clique na aplicação do domínio com mTLS.
3. Clique na aba **Rules Engine**.
4. Clique no botão **+ Rule**.
5. Dê um nome fácil de lembrar para sua regra.
6. Selecione **Request Phase**.
7. No campo **Criteria**, insira a variável mTLS desejada. Exemplo: `${ssl_client_escaped_cert}`.
8. Selecione o operador de comparação **exists**.
9. Na seção **Behavior**, selecione o comportamento **Add Request Header**.
10. Como argumento, insira `Nome-Variavel-Mtls: ${nome_variavel_ssl}`, substituindo o nome e a variável pelo nome da variável mTLS que você deseja inserir no cabeçalho da sua aplicação.
    - Exemplo: `Escaped-Client-Cert: ${ssl_client_escaped_cert}`

:::note
O uso do prefixo `X-` no nome do cabeçalho de variáveis HTTP personalizadas é desencorajado pela Internet Engineering Task Force (IETF) sob o [RFC 6648](https://datatracker.ietf.org/doc/rfc6648/). A IETF recomenda o uso de um formato simples de `Nome-Do-Cabeçalho` para indicar o uso real da variável.
:::

11. Para adicionar outra variável, clique no botão **And** na seção **Criteria** e repita as etapas restantes.
12. Clique no botão **Save** quando terminar.
</Fragment>

<Fragment slot="panel.api">
1. Execute a seguinte requisição `POST` no seu terminal, substituindo `[TOKEN VALUE]` pelo seu [personal token](/pt-br/documentacao/produtos/guias/personal-tokens/) e `<application_id>` com o ID da application associada ao domínio com mTLS:

<Code lang="bash" code={`
curl --location 'https://api.azionapi.net/edge_applications/<application_id>/rules_engine/request/rules' \
--header 'Accept: application/json; version=3' \
--header 'Content-Type: application/json' \
--header 'Authorization: Token [TOKEN VALUE]' \
--data '{
    "name": "mTLS variables",
    "description": "Adds certificate values according to Open Banking standards",
    "phase": "request",
    "behaviors": [
        {
            "name": "add_request_header",
            "target": "Escaped-Client-Cert: \${ssl_client_escaped_cert}"
        }
    ],
    "criteria": [
        [
            {
                "variable": "\${ssl_client_escaped_cert}",
                "operator": "exists",
                "conditional": "if",
                "input_value": ""
            }
        ]
    ]
}'
`} />

2. Você receberá uma resposta semelhante a esta:

```json
{
  "results": {
      "id": <rule_id>,
      "name": "mTLS variables",
      "phase": "request",
      "behaviors": [
          {
              "name": "add_request_header",
              "target": "Escaped-Client-Cert: ${ssl_client_escaped_cert}"
          }
      ],
      "criteria": [
          [
              {
                  "variable": "${ssl_client_escaped_cert}",
                  "operator": "exists",
                  "conditional": "if",
                  "input_value": ""
              }
          ]
      ],
      "description": "Adds certificate values according to Open Banking standards"
  }
}
```

3. Repita os passos anteriores para cada variável mTLS necessária nos cabeçalhos.
</Fragment>

</Tabs>

---