Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa guida introduttiva illustra come distribuire un gateway applicazione di Azure con mutual TLS (mTLS) passthrough usando un modello di Azure Resource Manager (modello ARM) e la versione dell'API 2025-03-01. In modalità pass-through, il gateway richiede un certificato client ma non lo convalida. La convalida dei certificati e l'imposizione dei criteri vengono eseguite nel back-end.
Funzionalità principali
- Associare un profilo SSL al listener per il passaggio mTLS.
- Non è necessario alcun certificato CA client al gateway.
- La
verifyClientAuthModeproprietà supporta i valoriStrictePassthrough. - Portal support: è possibile configurare il pass-through mTLS direttamente nel portale di Azure.
Annotazioni
Il supporto di PowerShell e dell'interfaccia della riga di comando per la configurazione pass-through non è attualmente disponibile. È possibile configurare il passthrough mTLS usando il portale di Azure o i modelli di Azure Resource Manager.
Configurare il passaggio mTLS utilizzando il portale di Azure
È possibile configurare il pass-through mTLS direttamente nel portale di Azure creando un profilo SSL con il metodo di autenticazione client Passthrough:
Passare alla risorsa Gateway applicazione nel portale di Azure.
In Impostazioni selezionare Profili SSL.
Selezionare + Aggiungi per creare un nuovo profilo SSL.
Immettere un nome per il profilo SSL.
Nella scheda Autenticazione client selezionare Passthrough.
In modalità pass-through il certificato client è facoltativo e il server back-end è responsabile dell'autenticazione client.
- Configurare le impostazioni dei criteri SSL in base alle esigenze.
- Selezionare Aggiungi per creare il profilo SSL.
- Associare il profilo SSL al listener HTTPS.
Prerequisiti
- Sottoscrizione di Azure e gruppo di risorse.
- interfaccia della riga di comando di Azure installato localmente.
- Un certificato SSL (PFX con codifica Base64) e una password.
- Una chiave SSH per l'amministratore della macchina virtuale Linux (se applicabile).
- Versione
2025-03-01dell'API o successiva per la proprietà pass-through.
Distribuire un gateway applicazione con listener pass-through mTLS
Questo modello crea le risorse seguenti:
- Una rete virtuale con due subnet (una delegata all'Application Gateway).
- Indirizzo IP pubblico per il front-end del gateway.
- Un gateway applicativo (Standard_v2) con:
- Certificato SSL e profilo SSL per il pass-through del certificato client.
- Ascoltatore HTTPS e regola di instradamento.
- Pool back-end che punta a un servizio app.
Aggiornare il modello con i dettagli di configurazione e includere un certificato SSL valido.
File di parametri: 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>"
}
}
}
File modello: 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'))]"
]
}
]
}
Implementare il modello
Eseguire il comando interfaccia della riga di comando di Azure seguente per distribuire il modello:
az deployment group create \
--resource-group <your-resource-group> \
--template-file deploymentTemplate.json \
--parameters @deploymentParameters.json
Convalidare e testare
Convalidare la distribuzione
Nel Portale di Azure, passare alla risorsa Application Gateway.
Selezionare Visualizzazione JSON e selezionare Versione
2025-03-01API.Verificare che
verifyClientAuthModesia impostato suPassthroughnel profilo 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>" } ] } } ]
Inviare un certificato client al back-end
Se è necessario inoltrare il certificato client al back-end, configurare una regola di riscrittura. Per ulteriori informazioni, consultare Riscrivere intestazioni HTTP e URL con Application Gateway.
Quando il client invia un certificato, questa riscrittura garantisce che il certificato del client sia incluso nelle intestazioni della richiesta per l'elaborazione del backend.
Testare la connettività
Verificare che le connessioni vengano stabilite anche quando non viene fornito un certificato client.
Parametri di passaggio mTLS
La tabella seguente descrive i parametri per la configurazione pass-through mTLS:
| Nome | TIPO | Description |
|---|---|---|
verifyClientCertIssuerDN |
Booleano | Specifica se verificare il nome dell'autorità emittente del certificato cliente sul gateway. |
verifyClientRevocation |
String | Specifica la modalità di verifica della revoca del certificato client. |
verifyClientAuthMode |
String | Specifica la modalità certificato client. I valori validi sono Strict e Passthrough. |
Modalità pass-through: Il gateway richiede un certificato client ma non lo applica. Il back-end convalida il certificato e applica i criteri.
Considerazioni relative alla sicurezza
Seguire le procedure consigliate per la sicurezza e la gestione dei dati dell'organizzazione durante la distribuzione e la gestione di questa soluzione.