# Como configurar mTLS

> **Importante**
>
> Estamos lançando uma atualização significativa em nossa plataforma. Para saber mais sobre as mudanças e etapas de migração necessárias, consulte a [página de rollout da API v4](/pt-br/documentacao/fundamentos/api-v4-migration/).

**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/plataforma/workloads/mtls/).

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

> **Dica**
>
> Se você não tem certeza de quais etapas se aplicam à sua conta, consulte [o guia Verificar Migração da Conta](/pt-br/documentacao/guias/seguranca-de-aplicacoes/acesso-e-compliance/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/guias/plataforma/conta-e-billing/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.

> **Nota**
>
> 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

**Console - Workloads**

1. Acesse o [Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/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**.

**Console - Domains**

1. Acesse o [Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/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**.

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

> **Nota**
>
> 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.

[consulte a lista de variáveis disponíveis](/pt-br/documentacao/plataforma/applications/rules-engine/)

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.

---
