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

Seção intitulada Adicione um Trusted CA e associe a um dominio
  1. Acesse o Azion Console > Digital Certificates.
  2. Clique no botão Add Certificate.
  3. Selecione a opção Trusted CA Certificate no menu suspenso.
  4. Dê um nome fácil de lembrar para o seu certificado.
  5. No campo Certificate, cole o seu certificado, incluindo as tags de início e fim.
  1. 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 > Domains.
  2. Clique no domínio que deseja configurar o mTLS.
  3. Ative o switch Enable Mutual Authentication (mTLS).
  4. 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.
  5. Selecione o Trusted CA que você criou.
  6. Clique no botão Salvar.
  1. Execute a seguinte requisição POST no seu terminal, substituindo [TOKEN VALUE] pelo seu personal token e o certificado na propriedade certificate:
Terminal window
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"
}'
ChaveDescrição
nameNome da instância do certificado
certificateString 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_typeEnum que indica o tipo do certificado. Certificados do tipo Trusted CA são atribuídos o valor trusted_ca_certificate
  1. 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
}
}
  1. Copie o valor digital_certificate_id. Ele será usado para associar o certificado a um domínio.
  2. 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:
Terminal window
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>
}'
ChaveDescrição
nameNome da instância do domínio
cnamesAceita um array de strings contendo os CNAMEs para o domínio como valores
digital_certificate_idEnum que, quando null, seleciona o certificado Azion SAN
edge_application_idO ID da aplicação vinculada ao domínio
is_mtls_enabledBooleano que, quando true, ativa a verificação mTLS para o domínio
mtls_verificationEnum que define o modo de verificação. Pode ser enforce ou permissive
mtls_trusted_ca_certificate_idO ID do Trusted CA
  1. 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
}
  1. Aguarde o tempo de propagação. Seu domínio agora deve estar usando o protocolo mTLS.

Crie regras específicas para Permissive mTLS

Seção intitulada Crie regras especificas 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.

  1. Acesse o Azion Console > Edge Firewall.
  2. Configure um edge firewall para o domínio mTLS.
  3. Clique na aba Rules Engine do Edge Firewall.
  4. Clique no botão New Rule.
  5. Dê um nome fácil de lembrar para sua regra.
  6. Na seção Criteria, como variável, selecione Hostname.
  7. Como operador de comparação, selecione is equal to.
  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 to.
  12. Como argumento, insira true.
  13. Na seção Behavior, selecione Deny (403 Forbidden).
  14. Clique no botão Save.
  1. 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:
Terminal window
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"
}
]
]
}'
ChaveDescrição
nameNome da regra
descriptionDescrição da regra
behaviorsArray que armazena objetos que definem comportamentos
criteriaArray que armazena objetos que definem critérios
  1. 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

Seção intitulada Especifique variaveis mTLS em cabecalhos 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:

Terminal window
curl -skv https://mydomain.com/ -H "Pragma: azion-debug-cache" -o /dev/stdout --cert cert.pem --key key.pem
  1. Acesse o Azion Console > Edge Application.
  2. Encontre e clique na aplicação do domínio com mTLS.
  3. Clique na aba Rules Engine.
  4. Clique no botão New Rule e selecione Request Phase.
  5. Dê um nome fácil de lembrar para sua regra.
  6. No campo Criteria, insira a variável mTLS desejada. Exemplo: ${ssl_client_escaped_cert}.
  7. Selecione o operador de comparação exists.
  8. Na seção Behavior, selecione o comportamento Add Request Header.
  9. 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}
  1. Para adicionar outra variável, clique no botão And na seção Criteria e repita as etapas restantes.
  2. Clique no botão Save quando terminar.
  1. 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:
Terminal window
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": ""
}
]
]
}'
  1. 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"
}
}
  1. Repita os passos anteriores para cada variável mTLS necessária nos cabeçalhos.



Contributors