Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia de início rápido mostra como implantar uma Gateway de Aplicativo do Azure com mutual TLS (mTLS) passthrough usando um modelo de Azure Resource Manager (ARM template) e uma versão de API 2025-03-01. No modo de passagem, o gateway solicita um certificado do cliente, mas não o valida. A validação do certificado e a imposição de política ocorrem no back-end.
Características principais
- Associe um perfil SSL ao ouvinte da passagem mTLS.
- Nenhum certificado de AC do cliente é necessário no gateway.
- A propriedade
verifyClientAuthModedá suporte aos valoresStrictePassthrough. - Portal de Suporte: você pode configurar a passagem do mTLS diretamente no portal do Azure.
Observação
O suporte do PowerShell e da CLI para a configuração de passthrough não está disponível no momento. Você pode configurar a passagem do mTLS usando o portal Azure ou modelos do ARM.
Configurar a passagem do mTLS usando Azure portal
Você pode configurar a passagem mTLS diretamente no portal Azure criando um perfil SSL com o método de autenticação de cliente Passthrough:
Navegue até o recurso do Gateway de Aplicativo no portal do Azure.
Em Configurações, selecione perfis SSL.
Selecione + Adicionar para criar um novo perfil SSL.
Insira um nome para seu perfil SSL.
Na guia Autenticação do Cliente , selecione Passagem.
No modo passagem, o certificado do cliente é opcional e o servidor de back-end é responsável pela autenticação do cliente.
- Defina as configurações da Política SSL conforme necessário.
- Selecione Adicionar para criar o perfil SSL.
- Associe o perfil SSL ao ouvinte HTTPS.
Pré-requisitos
- Uma assinatura do Azure e um grupo de recursos.
- CLI do Azure instalado localmente.
- Um certificado SSL (PFX codificado em Base64) e uma senha.
- Uma chave SSH para o administrador de VM do Linux (se aplicável).
- Versão da API
2025-03-01ou posterior para a propriedade de passagem.
Implantar o Gateway de Aplicativo com o ouvinte de passagem mTLS
Este modelo cria os seguintes recursos:
- Uma rede virtual com duas sub-redes (uma delegada ao Gateway de Aplicativo).
- Um endereço IP público para o front-end do gateway.
- Um Gateway de Aplicação (Standard_v2) com:
- Certificado SSL e perfil SSL para passagem de certificado do cliente.
- Regra de roteamento e ouvinte HTTPS.
- Pool de back-end apontando para um serviço de aplicativo.
Atualize o modelo com seus detalhes de configuração e inclua um certificado SSL válido.
Arquivo de parâmetro: deploymentParameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"addressPrefix": {
"value": "10.0.0.0/16"
},
"subnetPrefix": {
"value": "10.0.0.0/24"
},
"skuName": {
"value": "Standard_v2"
},
"capacity": {
"value": 2
},
"adminUsername": {
"value": "ubuntu"
},
"adminSSHKey": {
"value": "<your-ssh-public-key>"
},
"certData": {
"value": "<Base64-encoded-PFX-data>"
},
"certPassword": {
"value": "<certificate-password>"
}
}
}
Arquivo de modelo: deploymentTemplate.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"addressPrefix": {
"defaultValue": "10.0.0.0/16",
"type": "String",
"metadata": {
"description": "Address prefix for the Virtual Network"
}
},
"subnetPrefix": {
"defaultValue": "10.0.0.0/24",
"type": "String",
"metadata": {
"description": "Subnet prefix"
}
},
"skuName": {
"defaultValue": "Standard_Medium",
"type": "String",
"metadata": {
"description": "Sku Name"
}
},
"capacity": {
"defaultValue": 2,
"type": "Int",
"metadata": {
"description": "Number of instances"
}
},
"adminUsername": {
"type": "String"
},
"adminSSHKey": {
"type": "securestring"
},
"certData": {
"type": "String",
"metadata": {
"description": "ssl cert data"
}
},
"certPassword": {
"type": "SecureString",
"metadata": {
"description": "ssl cert password"
}
}
},
"variables": {
"applicationGatewayName": "mtlsAppGw",
"idName": "identity",
"publicIPAddressName": "mtlsPip",
"virtualNetworkName": "mtlsVnet",
"subnetName": "appgwsubnet",
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',variables('virtualNetworkName'))]",
"subnetRef": "[concat(variables('vnetID'),'/subnets/',variables('subnetName'))]",
"publicIPRef": "[resourceId('Microsoft.Network/publicIPAddresses',variables('publicIPAddressName'))]",
"applicationGatewayID": "[resourceId('Microsoft.Network/applicationGateways',variables('applicationGatewayName'))]",
"apiVersion": "2025-03-01",
"identityID": "[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities',variables('idName'))]",
"backendSubnetId": "[concat(variables('vnetID'),'/subnets/backendsubnet')]"
},
"resources": [
{
"type": "Microsoft.Network/virtualNetworks",
"name": "[variables('virtualNetworkName')]",
"apiVersion": "2024-07-01",
"location": "[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('addressPrefix')]"
]
},
"subnets": [
{
"name": "[variables('subnetName')]",
"properties": {
"addressPrefix": "[parameters('subnetPrefix')]",
"delegations": [
{
"name": "Microsoft.Network/applicationGateways",
"properties": {
"serviceName": "Microsoft.Network/applicationGateways"
}
}
]
}
},
{
"name": "backendSubnet",
"properties": {
"addressPrefix": "10.0.2.0/24"
}
}
]
}
},
{
"type": "Microsoft.Network/publicIPAddresses",
"sku": {
"name": "Standard"
},
"name": "[variables('publicIPAddressName')]",
"apiVersion": "2024-07-01",
"location": "[resourceGroup().location]",
"properties": {
"publicIPAllocationMethod": "Static"
}
},
{
"type": "Microsoft.Network/applicationGateways",
"name": "[variables('applicationGatewayName')]",
"apiVersion": "[variables('apiVersion')]",
"location": "[resourceGroup().location]",
"properties": {
"sku": {
"name": "Standard_v2",
"tier": "Standard_v2",
"capacity": 3
},
"sslCertificates": [
{
"name": "sslCert",
"properties": {
"data": "[parameters('certData')]",
"password": "[parameters('certPassword')]"
}
}
],
"sslPolicy": {
"policyType": "Predefined",
"policyName": "AppGwSslPolicy20220101"
},
"sslProfiles": [
{
"name": "sslnotrustedcert",
"id": "[concat(resourceId('Microsoft.Network/applicationGateways', variables('applicationGatewayName')), '/sslProfiles/sslnotrustedcert')]",
"properties": {
"clientAuthConfiguration": {
"VerifyClientCertIssuerDN": false,
"VerifyClientRevocation": "None",
"VerifyClientAuthMode": "Passthrough"
}
}
}
],
"gatewayIPConfigurations": [
{
"name": "appGatewayIpConfig",
"properties": {
"subnet": {
"id": "[variables('subnetRef')]"
}
}
}
],
"frontendIPConfigurations": [
{
"name": "appGatewayFrontendIP",
"properties": {
"PublicIPAddress": {
"id": "[variables('publicIPRef')]"
}
}
}
],
"frontendPorts": [
{
"name": "port2",
"properties": {
"Port": 444
}
}
],
"backendAddressPools": [
{
"name": "pool2",
"properties": {
"BackendAddresses": [
{
"fqdn": "headerappgw-hsa5gjh8fpfebcfd.westus-01.azurewebsites.net"
}
]
}
}
],
"backendHttpSettingsCollection": [
{
"name": "settings2",
"properties": {
"Port": 80,
"Protocol": "Http"
}
}
],
"httpListeners": [
{
"name": "listener2",
"properties": {
"FrontendIPConfiguration": {
"Id": "[concat(variables('applicationGatewayID'), '/frontendIPConfigurations/appGatewayFrontendIP')]"
},
"FrontendPort": {
"Id": "[concat(variables('applicationGatewayID'), '/frontendPorts/port2')]"
},
"Protocol": "Https",
"SslCertificate": {
"Id": "[concat(variables('applicationGatewayID'), '/sslCertificates/sslCert')]"
},
"sslProfile": {
"id": "[concat(variables('applicationGatewayID'), '/sslProfiles/sslnotrustedcert')]"
}
}
}
],
"requestRoutingRules": [
{
"Name": "rule2",
"properties": {
"RuleType": "Basic",
"priority": 2000,
"httpListener": {
"id": "[concat(variables('applicationGatewayID'), '/httpListeners/listener2')]"
},
"backendAddressPool": {
"id": "[concat(variables('applicationGatewayID'), '/backendAddressPools/pool2')]"
},
"backendHttpSettings": {
"id": "[concat(variables('applicationGatewayID'), '/backendHttpSettingsCollection/settings2')]"
}
}
}
]
},
"dependsOn": [
"[concat('Microsoft.Network/virtualNetworks/', variables('virtualNetworkName'))]",
"[concat('Microsoft.Network/publicIPAddresses/', variables('publicIPAddressName'))]"
]
}
]
}
Implantar o modelo
Execute o seguinte comando CLI do Azure para implantar o modelo:
az deployment group create \
--resource-group <your-resource-group> \
--template-file deploymentTemplate.json \
--parameters @deploymentParameters.json
Validar e testar
Validar a implantação
No portal do Azure, navegue até o recurso do Application Gateway.
Selecione Exibição JSON e selecione a versão da API
2025-03-01.Verifique se
verifyClientAuthModeestá ajustado paraPassthroughno perfil SSL:"sslProfiles": [ { "name": "sslnotrustedcert", "id": "<sample-subscription-id>", "etag": "W/\"851e4e20-d2b1-4338-9135-e0beac11aa0e\"", "properties": { "provisioningState": "Succeeded", "clientAuthConfiguration": { "verifyClientCertIssuerDN": false, "verifyClientRevocation": "None", "verifyClientAuthMode": "Passthrough" }, "httpListeners": [ { "id": "<sample-subscription-id>" } ] } } ]
Enviar um certificado de cliente para o back-end
Se você precisar encaminhar o certificado do cliente para o back-end, configure uma regra de reescrita. Para obter mais informações, consulte Reescrever cabeçalhos HTTP e URL com o Gateway de Aplicativo.
Quando o cliente envia um certificado, essa regravação garante que o certificado do cliente seja incluído nos cabeçalhos de solicitação para processamento de back-end.
Testar a conectividade
Verifique se as conexões são estabelecidas mesmo quando um certificado do cliente não é fornecido.
Parâmetros de passagem do mTLS
A tabela a seguir descreve os parâmetros para a configuração de passagem do mTLS:
| Nome | Tipo | Description |
|---|---|---|
verifyClientCertIssuerDN |
booleano | Especifica se o nome do emissor do certificado do cliente deve ser verificado no gateway. |
verifyClientRevocation |
String | Especifica o modo de verificação de revogação de certificado do cliente. |
verifyClientAuthMode |
String | Especifica o modo de certificado do cliente. Os valores válidos são Strict e Passthrough. |
Modo de passagem: O gateway solicita um certificado de cliente, mas não o impõe. O back-end valida o certificado e impõe a política.
Considerações de segurança
Siga as práticas recomendadas de segurança e manipulação de dados da sua organização ao implantar e gerenciar essa solução.