Distribuera en Azure Application Gateway med mTLS-lyssnaren för genomströmning

Den här snabbstarten visar hur du distribuerar en Azure Application Gateway med mutual TLS (mTLS) genomströmning med hjälp av en Azure Resource Manager-mall (ARM-mall) och API-version 2025-03-01. I genomströmningsläge begär gatewayen ett klientcertifikat men validerar det inte. Certifikatverifiering och principframtvingande sker på serverdelen.

Viktiga funktioner

  • Associera en SSL-profil med lyssnaren för mTLS-genomströmning.
  • Det krävs inget klient CA-certifikat på gateway.
  • Egenskapen verifyClientAuthMode stöder Strict och Passthrough värden.
  • Portal support: Du kan konfigurera mTLS-genomströmning direkt i Azure portalen.

Anmärkning

PowerShell- och CLI-stöd för genomströmningskonfiguration är för närvarande inte tillgängliga. Du kan konfigurera mTLS-genomströmning med hjälp av Azure-portalen eller ARM-mallar.

Konfigurera mTLS-genomströmning med hjälp av Azure-portalen

Du kan konfigurera mTLS-genomströmning direkt i Azure portalen genom att skapa en SSL-profil med Passthrough klientautentiseringsmetod:

  1. Gå till din Application Gateway-resurs i Azure-portalen.

  2. Under Inställningar väljer du SSL-profiler.

  3. Välj + Lägg till för att skapa en ny SSL-profil.

  4. Ange ett namn för din SSL-profil.

  5. På fliken Klientautentisering väljer du Passering.

    I genomgångsläge är klientcertifikatet valfritt och backend-servern ansvarar för klientautentisering.

Screenshot som visar dialogrutan Skapa SSL-profil i Azure-portalen med Överföring valt för klientautentiseringsmetod.

  1. Konfigurera SSL-principinställningar efter behov.
  2. Välj Lägg till för att skapa SSL-profilen.
  3. Associera SSL-profilen med HTTPS-lyssnaren.

Förutsättningar

  • En Azure-prenumeration och resursgrupp.
  • Azure CLI installerat lokalt.
  • Ett SSL-certifikat (Base64-kodad PFX) och lösenord.
  • En SSH-nyckel för administratör för virtuella Linux-datorer (om tillämpligt).
  • API-version 2025-03-01 eller senare för egenskapen passthrough.

Distribuera Application Gateway med mTLS genomströmningslyssnare

Den här mallen skapar följande resurser:

  • Ett virtuellt nätverk med två undernät (ett delegerat till Application Gateway).
  • En offentlig IP-adress för gateway-klientdelen.
  • En Application Gateway (Standard_v2) med:
    • SSL-certifikat och SSL-profil för genomströmning av klientcertifikat.
    • HTTPS-lyssnare och routningsregel.
    • Backend-pool som pekar på en appservice.

Uppdatera mallen med din konfigurationsinformation och inkludera ett giltigt SSL-certifikat.

Parameterfil: 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>"
        }
    }
}

Mallfil: 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'))]"
            ]
        }
    ]
}

Använd mallen

Kör följande Azure CLI kommando för att distribuera mallen:

az deployment group create \
  --resource-group <your-resource-group> \
  --template-file deploymentTemplate.json \
  --parameters @deploymentParameters.json

Validera och testa

Verifiera utplaceringen

  1. I Azure Portal går du till din Application Gateway-resurs.

  2. Välj JSON-vy och välj API-version 2025-03-01.

  3. Kontrollera att verifyClientAuthMode är inställt på Passthrough i SSL-profilen.

    "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>"
                    }
                ]
            }
        }
    ]
    

Skicka ett klientcertifikat till serverdelen

Om du behöver vidarebefordra klientcertifikatet till serverdelen konfigurerar du en omskrivningsregel. Mer information finns i Skriva om HTTP-huvuden och URL med Application Gateway.

När klienten skickar ett certifikat säkerställer den här omskrivningen att klientcertifikatet ingår i begärandehuvudena för serverdelsbearbetning.

Testa anslutningen

Kontrollera att anslutningar upprättas även när ett klientcertifikat inte har angetts.

mTLS-genomströmningsparametrar

I följande tabell beskrivs parametrarna för mTLS-genomströmningskonfiguration:

Namn Typ Description
verifyClientCertIssuerDN Boolean Anger om klientens certifikatutfärdarnamn ska verifieras på gatewayen.
verifyClientRevocation String Anger verifieringsläget för återkallning av klientcertifikat.
verifyClientAuthMode String Anger klientcertifikatläget. Giltiga värden är Strict och Passthrough.

Genomströmningsläge: Gatewayen begär ett klientcertifikat men framtvingar det inte. Serverdelen validerar certifikatet och tillämpar principen.

Säkerhetsfrågor

Följ organisationens metodtips för säkerhets- och datahantering när du distribuerar och hanterar den här lösningen.