Como configurar e associar um certificado mTLS a um domínio
O Mutual Transport Layer Security (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 com suporte a mTLS assinado por uma autoridade certificadora, ou Certificate Authority (CA). Na Azion, este tipo de certificado é chamado de Trusted CA.
Adicione um Trusted CA e associe a um domínio
- Execute a seguinte requisição
POST
no seu terminal, substituindo[TOKEN VALUE]
pelo seu personal token e o certificado na propriedadecertificate
:
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 |
- Você receberá uma resposta semelhante a esta:
{ "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 }
}
- Copie o valor
digital_certificate_id
. Ele será usado para associar o certificado a um domínio. - Execute a seguinte requisição
POST
no seu terminal, substituindo[TOKEN VALUE]
pelo seu personal token, a<edge_application_id>
por um ID de edge application, e<digital_certificate_id>
pelo ID do Trusted CA que você criou:
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": <edge_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 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 |
- Você receberá uma resposta semelhante a esta:
{ "id": <domain_id>, "name": "mydomain.com", "cnames": [ "mydomain.com" ], "cname_access_only": true, "digital_certificate_id": null, "edge_application_id": <edge_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
}
- Aguarde o tempo de propagação. Seu domínio agora deve estar usando o protocolo mTLS.
- Acesse o Azion Console > Digital Certificates.
- Clique no botão + Digital Certificate.
- Dê um nome fácil de lembrar para o seu certificado.
- Selecione a opção Import Trusted CA Certificate no menu suspenso.
- No campo Private Certificate, cole o seu certificado, incluindo as tags de início e fim.
- 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.
- Acesse o Azion Console > Domains.
- Clique no domínio que deseja configurar o mTLS.
- Ative o switch Mutual Authentication.
- Escolha o modo de verificação que deseja usar.
- Ao selecionar Enforce (padrão), o mTLS é ativado no domínio de sua edge 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 Edge Firewall.
- Selecione o Trusted CA Certificate que você criou.
- Clique no botão Save.
- Acesse o Real-Time Manager (RTM) > Digital Certificates.
- Clique no botão Add Certificate.
- Selecione a opção Trusted CA Certificate no menu suspenso.
- Dê um nome fácil de lembrar para o seu certificado.
- No campo Certificate, cole o seu certificado, incluindo as tags de início e fim.
- 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.
- Acesse o Real-Time Manager (RTM) > Domains.
- Clique no domínio que deseja configurar o mTLS.
- Ative o switch Enable Mutual Authentication (mTLS).
- Escolha o modo de verificação que deseja usar.
- Ao selecionar Enforce (padrão), o mTLS é ativado no domínio de sua edge 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 Edge Firewall.
- Selecione o Trusted CA que você criou.
- Clique no botão Save.
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 Edge Firewall. 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
.
- Acesse o Azion Console > Edge Firewall.
- Configure um edge firewall para o domínio mTLS.
- Clique na aba Rules Engine.
- Clique no botão + Rules Engine.
- Dê um nome fácil de lembrar para sua regra.
- Na seção Criteria, como variável, selecione Host.
- Como operador de comparação, selecione is equal.
- Como argumento, insira
mydomain.com
. - Clique no botão + And para adicionar um novo critério.
- Como variável, selecione Client Certificate Validation.
- Como operador de comparação, selecione is not equal.
- Como argumento, insira
true
. - Na seção Behavior, selecione Deny (403 Forbidden).
- Clique no botão Save.
- Acesse o Real-Time Manager (RTM) > Edge Firewall.
- Configure um edge firewall para o domínio mTLS.
- Clique na aba Rules Engine do Edge Firewall.
- Clique no botão New Rule.
- Dê um nome fácil de lembrar para sua regra.
- Na seção Criteria, como variável, selecione Hostname.
- Como operador de comparação, selecione is equal to.
- Como argumento, insira
mydomain.com
. - Clique no botão + And para adicionar um novo critério.
- Como variável, selecione Client Certificate Validation.
- Como operador de comparação, selecione is not equal to.
- Como argumento, insira
true
. - Na seção Behavior, selecione Deny (403 Forbidden).
- Clique no botão Save.
- Execute a seguinte requisição
POST
no seu terminal, substituindo[TOKEN VALUE]
pelo seu personal token e o<edge_firewall_id>
pelo ID do firewall associado ao domínio mTLS:
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 |
- Você receberá uma resposta semelhante a esta:
{ "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 }
}
Especifique variáveis mTLS em cabeçalhos HTTP
Para especificar variáveis mTLS em cabeçalhos HTTP, você deve usar o Rules Engine para Edge Application. 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:
Você também pode inserir cabeçalhos com outras variáveis da lista de variáveis mTLS disponíveis.
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:
- Execute a seguinte requisição
POST
no seu terminal, substituindo[TOKEN VALUE]
pelo seu personal token e<edge_application_id>
com o ID da edge application associada ao domínio com mTLS:
curl --location 'https://api.azionapi.net/edge_applications/<edge_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": "" } ] ]
}'
- Você receberá uma resposta semelhante a esta:
{ "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" }
}
- Repita os passos anteriores para cada variável mTLS necessária nos cabeçalhos.
- Acesse o Azion Console > Edge Application.
- Encontre e clique na aplicação do domínio com mTLS.
- Clique na aba Rules Engine.
- Clique no botão + Rule.
- Dê um nome fácil de lembrar para sua regra.
- Selecione Request Phase.
- No campo Criteria, insira a variável mTLS desejada. Exemplo:
${ssl_client_escaped_cert}
. - Selecione o operador de comparação exists.
- Na seção Behavior, selecione o comportamento Add Request Header.
- 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}
- Exemplo:
- Para adicionar outra variável, clique no botão And na seção Criteria e repita as etapas restantes.
- Clique no botão Save quando terminar.
- Acesse o Real-Time Manager (RTM) > Edge Application.
- Encontre e clique na aplicação do domínio com mTLS.
- Clique na aba Rules Engine.
- Clique no botão New Rule e selecione Request Phase.
- Dê um nome fácil de lembrar para sua regra.
- No campo Criteria, insira a variável mTLS desejada. Exemplo:
${ssl_client_escaped_cert}
. - Selecione o operador de comparação exists.
- Na seção Behavior, selecione o comportamento Add Request Header.
- 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}
- Exemplo:
- Para adicionar outra variável, clique no botão And na seção Criteria e repita as etapas restantes.
- Clique no botão Save quando terminar.