# Como configurar mTLS

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'
import Apiv4Rollout from '~/includes/snippets/apiv4Rollout/pt/snippet.mdx'

<Apiv4Rollout />


**Mutual Transport Layer Security (mTLS)** é um protocolo de criptografia baseado no *Transport Layer Security (TLS)*, que valida o certificado digital de ambas as pontas de uma requisição.

Para configurar mTLS nas suas aplicações é necessário ativar o serviço através da nossa [equipe de Vendas](https://www.azion.com/pt-br/contato/), além de possuir um certificado digital com suporte para mTLS, fornecido por uma autoridade certificadora terceira. Na Azion, chamamos esse certificado de **Trusted Certificate (Trusted CA)**.

Mais informações sobre requisitos, certificados digitais, Trusted CA e como mTLS funciona na Azion estão disponíveis na página [Suporte para mTLS](/pt-br/documentacao/produtos/secure/firewall/mtls/).

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

:::tip
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 à sua biblioteca de Certificate Manager

Com seu **Trusted CA** criado, é necessário adicioná-lo à sua biblioteca de **Certificate Manager**, em **Edge Libraries**:

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Certificate Manager**, na seção **Edge Libraries**.
2. Clique no botão **+ Digital Certificate**.
3. Na página de cadastro de novos certificados, defina um nome de identificação para este certificado no campo **Name**.
4. Na seção **Import or Request Certificate**, selecione a opção **Import a Trusted CA certificate**.
5. Em  **Private Certificate**, insira o conteúdo que representa seu **Trusted CA**.
- O arquivo do certificado precisa ser do tipo `.pem` Privacy Enhanced Mail (PEM). Exemplo: `certificado.pem`.
6. Clique no botão *Save* para prosseguir.

Você será redirecionado para a página **Certificate Manager**, onde estarão listados todos os seus certificados, incluindo este recém-adicionado.

---

## Escolha os domínios

Após adicionar um **Trusted CA** à sua biblioteca de certificados, é necessário configurar quais domínios devem operar com mTLS.

1. Ainda no Console, selecione **Products menu** > **Domains**.
2. Clique no domínio referente a aplicação que gostaria de configurar **mTLS**.
3. Ative o switch **Mutual Authentication Settings**.
4. Escolha qual o modo de verificação deseja utilizar. Pode ser `Enforce` ou `Permissive`.
5. Clique no botão **Save** para prosseguir.

:::note
Ao selecionar a verificação `Enforce` (padrão), o mTLS estará ativado em sua **Applications** e todo tráfego que receber cumprirá a autenticação de cliente e de servidor.  No entanto, se a necessidade é testar ou acessar sua aplicação a partir de condições específicas, escolha a verificação `Permissive`. O ajuste do modo `Permissive` é feito através do **Rules Engine** do **Firewall** e os passos estão descritos na seção abaixo.

É importante lembrar que a má configuração do modo de verificação `Permissive` pode resultar em incidentes de segurança.
:::

---

## Adicione regras específicas para uso do Permissive mTLS

<Tabs client:visible>
    <Fragment slot="tab.consoleworkloads">Console - Workloads</Fragment>
    <Fragment slot="tab.consoledomains">Console - Domains</Fragment>

<Fragment slot="panel.consoleworkloads">

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Workloads**.
2. Selecione seu Workload.
3. Em **Deployment Settings** selecione o firewall que deseja usar ou clique no botão **+ Firewall** para criar um novo firewall.
4. Clique no botão **Save**.
5. Ainda no Console, vá para **Products Menu** > **Firewall**.
6. Clique na aba **Rules Engine**.
7. Clique no botão **+ Rule**.
8. Escolha um nome identificador para esta regra.
9. Defina os **Criteria** e **Behaviors** específicos para sua necessidade.
- Para este exemplo, a lógica será:
    - Criteria: *If* `Host` *is equal* `yourDomain.com` *+ And* `Client Certificate Validation` *is not equal* `true`.
    - Behaviors: *Then* `Deny (403 Forbidden)`.
10. Certifique-se de que o switch **Status** está ativado.
11. Clique no botão **Save**.

</Fragment>

<Fragment slot="panel.consoledomains">

1. Acesse o [Azion Console](/pt-br/documentacao/produtos/guias/como-acessar-o-azion-console/) > **Domains**.
2. Selecione seu Domain.
3. Em **Settings** selecione o firewall que deseja usar ou clique no botão **+ Firewall** para criar um novo firewall.
4. Clique no botão **Save**.
5. Ainda no Console, vá para **Products Menu** > **Firewall**.
6. Clique na aba **Rules Engine**.
7. Clique no botão **+ Rule**.
8. Escolha um nome identificador para esta regra.
9. Defina os **Criteria** e **Behaviors** específicos para sua necessidade.
- Para este exemplo, a lógica será:
    - Criteria: *If* `Host` *is equal* `yourDomain.com` *+ And* `Client Certificate Validation` *is not equal* `true`.
    - Behaviors: *Then* `Deny (403 Forbidden)`.
10. Certifique-se de que o switch **Status** está ativado.
11. Clique no botão **Save**.

</Fragment>
</Tabs>

Sem suporte a mTLS ativado na sua conta da Azion, a opção **Client Certificate Validation** no *Criteria* não irá aparecer.

:::note
Nessa lógica de exemplo, o firewall criado irá bloquear `(Error 403 Forbidden)` qualquer tráfego de rede de entrada com um **hostname** igual a `yourDomain.com`, mas que a validação do certificado do cliente não for verdadeira.
:::

---

## Especifique variáveis do mTLS no Header da aplicação

Caso sua aplicação faça parte do modelo Open Banking, será necessário especificar as variáveis `${ssl_client_escaped_cert}` e `${ssl_client_s_dn_parsed}` no *header* da sua aplicação. Você também pode inserir outras variáveis do mTLS.

<DocButton href="/pt-br/documentacao/produtos/build/applications/rules-engine/" label="consulte a lista de variáveis disponíveis" kind="secondary" size="medium" />

Para adicionar uma variável no header da sua aplicação, siga os passos:

1. No Console, selecione **Products Menu** > **Applications**.
2. Encontre e clique na aplicação com mTLS ativado.
3. Clique na aba **Rules Engine**.
4. Clique no botão **+ Rule**.
5. Defina um nome identificador para esta rule.
6. Selecione **Request Phase**.
7. No campo **Critéria**, troque o operador `is equal` para `exists`.
8. No campo *Behaviors* selecione a opção **Add Request Header** e adicione a variável que deseja inserir no header da sua aplicação.
- O uso do prefixo `X-` no `header-name` de variáveis HTTP customizadas é desencorajado pela entidade responsável pelo desenvolvimento do HTTP, Internet Engineering Task Force (IETF), desde 2012 ([RFC 6648](https://datatracker.ietf.org/doc/rfc6648/)). A IETF recomenda o uso de um `header-name` comum, que indique o uso real da variável, mas que não conflite com as variáveis padrões.
- Para adicionar mais uma variável, clique no `+` e volte para o passo 7.
9. Certifique-se que o switch **Active** está ativado.
10.  Clique no botão **Save**.

Uma das formas de testar a inserção dessas variáveis é com a ferramenta [curl](https://curl.se/). A partir de um diretório contendo seu **Trusted CA** e sua respectiva chave em um arquivos `.pem`. Exemplo: `cert.pem` e `key.pem`, abra o terminal e rode `curl -skv https://<yourDomain.com>/ -H "pragma:azion-debug-cache" -o /dev/stdout --cert cert.pem --key key.pem`. Você deve encontrar `header-name:value` das variáveis adicionadas na resposta.

---