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

  1. Execute a seguinte requisição POST no seu terminal, substituindo [TOKEN VALUE] pelo seu personal token e o certificado na propriedade certificate:
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:
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

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

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:

Terminal window
curl -skv https://mydomain.com/ -H "Pragma: azion-debug-cache" -o /dev/stdout --cert cert.pem --key key.pem
  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:
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.


Contribuidores