Configurez TLS de bout en bout en utilisant Application Gateway avec PowerShell

Aperçu

Azure Application Gateway prend en charge le chiffrement de bout en bout du trafic. La passerelle d’application termine la connexion TLS/SSL à la passerelle d’application. La passerelle applique ensuite les règles de routage au trafic, re-chiffre le paquet et le transmet au serveur backend approprié selon les règles de routage définies. Toute réponse du serveur web passe par le même processus vers l’utilisateur final.

Application Gateway prend en charge la définition d’options TLS personnalisées. Il supporte également la désactivation des versions de protocole suivantes : TLSv1.0, TLSv1.1 et TLSv1.2, ainsi que la définition des suites de chiffrement à utiliser et de l’ordre de préférence. Pour en savoir plus sur les options TLS configurables, consultez cette vue d’ensemble de la stratégie TLS.

Note

SSL 2.0 et SSL 3.0 sont désactivés par défaut et ne peuvent pas être activés. Ils sont considérés comme non sécurisés et ne peuvent pas être utilisés avec Application Gateway.

Image du scénario

Scénario

Dans ce scénario, vous apprenez à créer une passerelle d’application en utilisant TLS de bout en bout avec PowerShell.

Ce scénario va :

  • Créez un groupe de ressources nommé appgw-rg.
  • Créez un réseau virtuel nommé appgwvnet avec un espace d’adressage 10.0.0.0/16.
  • Créez deux sous-réseaux appelés appgwsubnet et appsubnet.
  • Créez une petite passerelle d’application supportant le chiffrement TLS de bout en bout qui limite les versions du protocole TLS et les suites de chiffrement.

Avant de commencer

Note

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Install Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Pour configurer un TLS de bout en bout avec une passerelle d’application, un certificat est requis pour la passerelle et des certificats pour les serveurs backend. Le certificat passerelle est utilisé pour dériver une clé symétrique conformément à la spécification du protocole TLS. La clé symétrique est ensuite utilisée pour chiffrer et déchiffrer le trafic envoyé à la passerelle. Le certificat passerelle doit être au format Personal Information Exchange (PFX). Ce format de fichier vous permet d’exporter la clé privée requise par la passerelle d’application pour effectuer le chiffrement et le déchiffrement du trafic.

Pour le chiffrement TLS de bout en bout, le back-end doit être explicitement autorisé par la passerelle d’application. Téléchargez le certificat public des serveurs backend sur la passerelle d’application. L’ajout du certificat garantit que la passerelle applicative pourra communiquer uniquement avec des instances connues du serveur back-end. Il sécurise la communication de bout en bout.

Le processus de configuration est décrit dans les sections suivantes.

Créer le groupe de ressources

Cette section vous guide dans la création d’un groupe de ressources contenant la passerelle d’application.

  1. Connectez-vous à votre compte Azure.

    Connect-AzAccount
    
  2. Sélectionnez l’abonnement à utiliser dans ce scénario.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Créez un groupe de ressources. (Sauter cette étape si vous utilisez un groupe de ressources existant.)

    New-AzResourceGroup -Name appgw-rg -Location "West US"
    

Créer un réseau virtuel et un sous-réseau pour la passerelle Application Gateway

L’exemple suivant crée un réseau virtuel et deux sous-réseaux. Un sous-réseau est utilisé pour stocker la passerelle d’application. L’autre sous-réseau est utilisé pour les back-ends qui hébergent l’application web.

  1. Attribuer une plage d’adresses pour le sous-réseau à utiliser pour la passerelle d’application.

    $gwSubnet = New-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -AddressPrefix 10.0.0.0/24
    

    Note

    Dimensionnez correctement les sous-réseaux configurés pour une passerelle d’application. Une passerelle v1 prend en charge jusqu’à 32 instances, tandis qu’une passerelle v2 peut s’étendre jusqu’à 125 instances. Chaque instance prend une adresse IP du sous-réseau, donc dimensionnez le sous-réseau pour permettre la mise à l’échelle maximale de votre SKU. Un sous-réseau trop petit peut nuire à la mise à l’échelle d’une passerelle d’application. Pour l’autoscaling v2 et les limites d’instance, voir Scale Application Gateway v2 et WAF v2.

  2. Attribuez une plage d’adresses à utiliser pour le pool d’adresses backend.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Créez un réseau virtuel avec les sous-réseaux définis dans les étapes précédentes.

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Récupérer la ressource réseau virtuelle et les ressources de sous-réseau à utiliser dans les étapes suivantes.

    $vnet = Get-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg
    $gwSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appgwsubnet' -VirtualNetwork $vnet
    $nicSubnet = Get-AzVirtualNetworkSubnetConfig -Name 'appsubnet' -VirtualNetwork $vnet
    

Créer une adresse IP publique pour la configuration frontale

Créez une ressource IP publique à utiliser pour la passerelle d’application. Cette adresse IP publique est utilisée dans l’une des étapes suivantes.

$publicip = New-AzPublicIpAddress -ResourceGroupName appgw-rg -Name 'publicIP01' -Location "West US" -AllocationMethod Dynamic

Important

Application Gateway ne supporte pas l’utilisation d’une adresse IP publique créée avec une étiquette de domaine définie. Seule une adresse IP publique avec une étiquette de domaine créée dynamiquement est prise en charge. Si vous avez besoin d’un nom DNS compatible pour la passerelle d’application, nous vous recommandons d’utiliser un enregistrement CNAME comme alias.

Créer un objet de configuration de passerelle d’application

Tous les éléments de configuration sont configurés avant la création de la passerelle d’application. Les étapes suivantes créent les éléments de configuration nécessaires à une ressource passerelle d’application.

  1. Créez une configuration IP de passerelle applicative. Ce paramètre configure quels sous-réseaux la passerelle d’application utilise. Lorsque la passerelle d’application démarre, elle capte une adresse IP du sous-réseau configuré et aroute le trafic réseau vers les adresses IP du pool IP backend. Gardez à l’esprit que chaque instance utilise une adresse IP unique.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Créez une configuration d’adresse IP frontale. Ce paramètre associe une adresse IP privée ou publique à l’interface de la passerelle d’application. L’étape suivante associe l’adresse IP publique de l’étape précédente à la configuration de l’adresse IP frontale.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Configurez le pool d’adresses IP du backend avec les adresses IP des serveurs web backend. Ces adresses IP sont celles qui reçoivent le trafic réseau provenant du point d’accès IP frontend. Remplacez les adresses IP de l’exemple par vos propres points d’accès IP d’application.

    $pool = New-AzApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 203.0.113.1, 203.0.113.2, 203.0.113.3
    

    Note

    Un nom de domaine entièrement qualifié (FQDN) est également une valeur valide à utiliser à la place d’une adresse IP pour les serveurs backend. Vous l’activez en utilisant le commutateur -BackendFqdns .

  4. Configurez le port IP frontend pour le point d’accès IP public. Ce port est celui auquel les utilisateurs finaux se connectent.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Configurez le certificat pour la passerelle d’application. Ce certificat est utilisé pour déchiffrer et re-chiffrer le trafic sur la passerelle d’application.

    $passwd = ConvertTo-SecureString  <certificate file password> -AsPlainText -Force 
    $cert = New-AzApplicationGatewaySSLCertificate -Name cert01 -CertificateFile <full path to .pfx file> -Password $passwd 
    

    Note

    Cet exemple configure le certificat utilisé pour la connexion TLS. Le certificat doit être au format .pfx.

  6. Créez l’écouteur HTTP pour la passerelle d’application. Attribuez la configuration IP frontale, le port et le certificat TLS/SSL à utiliser.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Téléchargez le certificat à utiliser sur les ressources du pool backend compatibles TLS.

    Note

    La sonde par défaut obtient la clé publique de la liaison TLS par défaut sur l’adresse IP du backend et compare la valeur de clé publique qu’elle reçoit à la valeur de clé publique que vous fournissez ici.

    Si vous utilisez des en-têtes d’hôte et une indication de nom serveur (SNI) en arrière-plan, la clé publique récupérée n’est peut-être pas le site prévu vers lequel le trafic est dirigé. Si vous avez un doute, rendez-vous https://127.0.0.1/ sur les serveurs backend pour confirmer quel certificat est utilisé pour la liaison TLS par défaut . Utilisez la clé publique de cette requête dans cette section. Si vous utilisez des headers host-headers et SNI sur des liaisons HTTPS et que vous ne recevez pas de réponse ni de certificat d’une requête manuelle du navigateur sur https://127.0.0.1/ les serveurs backend, vous devez configurer une liaison TLS par défaut sur eux. Si vous ne le faites pas, les sondes lâchent et le backend n’est pas autorisé.

    Pour plus d’informations sur le SNI dans Application Gateway, voir Aperçu de la terminaison TLS et TLS de bout en bout avec Application Gateway.

    $authcert = New-AzApplicationGatewayAuthenticationCertificate -Name 'allowlistcert1' -CertificateFile C:\cert.cer
    

    Note

    Le certificat fourni à l’étape précédente doit être la clé publique du certificat .pfx présent en arrière-plan. Exportez le certificat (et non le certificat racine) installé sur le serveur backend au format Claim, Evidence, and Reasoning (CER) et utilisez-le à cette étape. Cette étape permet de gérer le backend avec la passerelle d’application.

    Si vous utilisez le SKU Application Gateway v2, alors créez un certificat racine de confiance au lieu d’un certificat d’authentification. Pour plus d’informations, voir Aperçu du TLS de bout en bout avec la passerelle d’application :

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Configurez les paramètres HTTP pour le backend de la passerelle applicative. Assignez le certificat téléchargé à l’étape précédente aux paramètres HTTP.

    $poolSetting = New-AzApplicationGatewayBackendHttpSettings -Name 'setting01' -Port 443 -Protocol Https -CookieBasedAffinity Enabled -AuthenticationCertificates $authcert
    

    Pour le SKU Application Gateway v2, utilisez la commande suivante :

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Créez une règle de routage pour l’équilibreur de charge qui configure le comportement de l’équilibreur de charge. Dans cet exemple, une règle de base en round-robin est créée.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Configurez la taille de l’instance de la passerelle d’application. Pour le SKU v1, les tailles disponibles sont Standard_Small, Standard_Medium et Standard_Large, et les valeurs de capacité sont de 1 à 32. Le SKU v2 (Standard_v2 ou WAF_v2) prend en charge jusqu’à 125 instances. Pour plus d’informations, consultez Mettre à l’échelle Application Gateway v2 et WAF v2.

    $sku = New-AzApplicationGatewaySku -Name Standard_Small -Tier Standard -Capacity 2
    

    Note

    Un nombre d’instances de 1 peut être choisi à des fins de test. Il est important de savoir que tout nombre d’instances sous deux instances n’est pas couvert par le SLA et n’est donc pas recommandé. Les petites passerelles sont destinées à être utilisées pour les tests de développement et non pour la production.

  11. Configurez la politique TLS pour qu’elle soit utilisée sur la passerelle d’application. Application Gateway permet de définir une version minimale pour les versions du protocole TLS.

    Les valeurs suivantes sont une liste de versions de protocole pouvant être définies :

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    L’exemple suivant fixe la version minimale du protocole à TLSv1_2 et n’autorise que TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 et TLS_RSA_WITH_AES_128_GCM_SHA256 .

    $SSLPolicy = New-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -PolicyType Custom
    

Créer la passerelle d’application

En suivant toutes les étapes précédentes, créez la passerelle d’application. La création de la passerelle est un processus qui prend beaucoup de temps à être exécuté.

Pour le SKU V1, utilisez la commande ci-dessous

$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -AuthenticationCertificates $authcert -Verbose

Pour le SKU V2, utilisez la commande ci-dessous

$appgw = New-AzApplicationGateway -Name appgateway -SSLCertificates $cert -ResourceGroupName "appgw-rg" -Location "West US" -BackendAddressPools $pool -BackendHttpSettingsCollection $poolSetting01 -FrontendIpConfigurations $fipconfig -GatewayIpConfigurations $gipconfig -FrontendPorts $fp -HttpListeners $listener -RequestRoutingRules $rule -Sku $sku -SSLPolicy $SSLPolicy -TrustedRootCertificate $trustedRootCert01 -Verbose

Demandez un nouveau certificat si le certificat backend est expiré

Utilisez cette procédure pour appliquer un nouveau certificat si le certificat backend est expiré.

  1. Récupérez la passerelle d’application pour la mettre à jour.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Ajoutez la nouvelle ressource de certificat à partir du fichier .cer, qui contient la clé publique du certificat et peut aussi être le même certificat ajouté à l’écouteur pour la terminaison TLS à la passerelle d’application.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Intégrez le nouvel objet certificat d’authentification dans une variable (TypeName : Microsoft.Azure. Commandes.Réseau.Modèles.PSAppliqueGatewayAuthenticationCertificate).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Assignez le nouveau certificat dans le paramètre BackendHttp et référez-le avec la variable $AuthCert. (Spécifiez le nom du paramètre HTTP que vous souhaitez changer.)

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Validez la modification dans la passerelle d’application et passez la nouvelle configuration contenue dans la variable $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Supprimer un certificat expiré inutilisé des paramètres HTTP

Utilisez cette procédure pour retirer un certificat expiré inutilisé des paramètres HTTP.

  1. Récupérez la passerelle d’application pour la mettre à jour.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Indiquez le nom du certificat d’authentification que vous souhaitez retirer.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Retirez le certificat d’authentification d’une passerelle d’application.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Validez la modification.

Set-AzApplicationGateway -ApplicationGateway $gw

Limiter les versions du protocole TLS sur une passerelle d’application existante

Les étapes précédentes vous ont conduit à créer une application avec TLS de bout en bout et à désactiver certaines versions du protocole TLS. L’exemple suivant désactive certaines politiques TLS sur une passerelle d’application existante.

  1. Récupérez la passerelle d’application pour la mettre à jour.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Définissez une politique TLS. Dans l’exemple suivant, TLSv1.0 et TLSv1.1 sont désactivés et les suites de chiffrement TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 et TLS_RSA_WITH_AES_128_GCM_SHA256 sont les seules autorisées.

    Set-AzApplicationGatewaySSLPolicy -MinProtocolVersion TLSv1_2 -PolicyType Custom -CipherSuite "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", "TLS_RSA_WITH_AES_128_GCM_SHA256" -ApplicationGateway $gw
    
    
  3. Enfin, mettez à jour la passerelle. Cette dernière étape est une tâche de longue date. Une fois terminé, le TLS de bout en bout est configuré sur la passerelle d’application.

    $gw | Set-AzApplicationGateway
    

Obtenez un nom DNS de passerelle d’application

Après la création de la passerelle, l’étape suivante consiste à configurer la interface pour la communication. Application Gateway nécessite un nom DNS assigné dynamiquement lorsqu’on utilise une IP publique, ce qui n’est pas convivial. Pour s’assurer que les utilisateurs finaux puissent accéder à la passerelle d’application, vous pouvez utiliser un enregistrement CNAME pour pointer vers le point de terminaison public de la passerelle d’application. Pour plus d’informations, voir Configurer un nom de domaine personnalisé pour dans Azure.

Pour configurer un alias, récupérez les détails de la passerelle d’application et de son nom IP/DNS associé en utilisant l’élément PublicIPAddress attaché à la passerelle d’application. Utilisez le nom DNS de la passerelle d’application pour créer un enregistrement CNAME qui dirige les deux applications web vers ce nom DNS. Nous ne recommandons pas l’utilisation des A-records, car le VIP peut changer au redémarrage de la passerelle d’application.

Get-AzPublicIpAddress -ResourceGroupName appgw-RG -Name publicIP01
Name                     : publicIP01
ResourceGroupName        : appgw-RG
Location                 : westus
Id                       : /subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/publicIPAddresses/publicIP01
Etag                     : W/"00000d5b-54ed-4907-bae8-99bd5766d0e5"
ResourceGuid             : 00000000-0000-0000-0000-000000000000
ProvisioningState        : Succeeded
Tags                     : 
PublicIpAllocationMethod : Dynamic
IpAddress                : xx.xx.xxx.xx
PublicIpAddressVersion   : IPv4
IdleTimeoutInMinutes     : 4
IpConfiguration          : {
                                "Id": "/subscriptions/<subscription_id>/resourceGroups/appgw-RG/providers/Microsoft.Network/applicationGateways/appgwtest/frontendIP
                            Configurations/frontend1"
                            }
DnsSettings              : {
                                "Fqdn": "00000000-0000-xxxx-xxxx-xxxxxxxxxxxx.cloudapp.net"
                            }

Étapes suivantes

Pour plus d’informations sur le renforcement de la sécurité de vos applications web avec Web Application Firewall via Application Gateway, consultez la vue d’ensemble du Web application firewall.