Konfigurowanie kompleksowego szyfrowania TLS przy użyciu usługi Application Gateway w programie PowerShell

Omówienie

aplikacja systemu Azure Gateway obsługuje kompleksowe szyfrowanie ruchu. Usługa Application Gateway przerywa połączenie TLS/SSL w bramie aplikacji. Następnie brama stosuje reguły routingu do ruchu, ponownie szyfruje pakiet i przekazuje pakiet do odpowiedniego serwera zaplecza na podstawie zdefiniowanych reguł routingu. Każda odpowiedź z serwera sieci Web przechodzi przez ten sam proces z powrotem do użytkownika końcowego.

Usługa Application Gateway obsługuje definiowanie niestandardowych opcji protokołu TLS. Obsługuje również wyłączanie następujących wersji protokołów: TLSv1.0, TLSv1.1 i TLSv1.2, a także definiowanie zestawów szyfrowania do użycia i kolejności preferencji. Aby dowiedzieć się więcej na temat konfigurowalnych opcji protokołu TLS, zobacz Omówienie zasad PROTOKOŁU TLS.

Uwaga

Protokoły SSL 2.0 i SSL 3.0 są domyślnie wyłączone i nie można ich włączyć. Są one uważane za niezabezpieczone i nie mogą być używane z usługą Application Gateway.

scenario image

Scenariusz

W tym scenariuszu dowiesz się, jak utworzyć bramę aplikacji przy użyciu kompleksowego protokołu TLS w programie PowerShell.

W tym scenariuszu:

  • Utwórz grupę zasobów o nazwie appgw-rg.
  • Utwórz sieć wirtualną o nazwie appgwvnet z przestrzenią adresową 10.0.0.0/16.
  • Utwórz dwie podsieci o nazwie appgwsubnet i appsubnet.
  • Utwórz małą bramę aplikacji obsługującą kompleksowe szyfrowanie TLS, które ogranicza wersje protokołu TLS i zestawy szyfrowania.

Zanim rozpoczniesz

Uwaga

Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Aby skonfigurować kompleksową obsługę protokołu TLS przy użyciu bramy aplikacji, dla bramy wymagany jest certyfikat, a certyfikaty są wymagane dla serwerów zaplecza. Certyfikat bramy służy do uzyskiwania klucza symetrycznego zgodnie ze specyfikacją protokołu TLS. Klucz symetryczny jest następnie używany do szyfrowania i odszyfrowywania ruchu wysyłanego do bramy. Certyfikat bramy musi być w formacie Wymiany informacji osobistych (PFX). Ten format pliku umożliwia wyeksportowanie klucza prywatnego wymaganego przez bramę aplikacji do przeprowadzenia szyfrowania i odszyfrowywania ruchu.

W przypadku kompleksowego szyfrowania TLS zaplecze musi być jawnie dozwolone przez bramę aplikacji. Przekaż certyfikat publiczny serwerów zaplecza do bramy aplikacji. Dodanie certyfikatu gwarantuje, że brama aplikacji komunikuje się tylko ze znanymi wystąpieniami zaplecza. Dodatkowo zabezpiecza to kompleksową komunikację.

Proces konfiguracji został opisany w poniższych sekcjach.

Tworzenie grupy zasobów

W tej sekcji opisano proces tworzenia grupy zasobów zawierającej bramę aplikacji.

  1. Zaloguj się do swojego konta platformy Azure.

    Connect-AzAccount
    
  2. Wybierz subskrypcję, która ma być używana w tym scenariuszu.

    Select-Azsubscription -SubscriptionName "<Subscription name>"
    
  3. Utwórz grupę zasobów. (Pomiń ten krok, jeśli używasz istniejącej grupy zasobów).

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

Tworzenie sieci wirtualnej i podsieci dla bramy aplikacji

Poniższy przykład tworzy sieć wirtualną i dwie podsieci. Jedna podsieć jest używana do przechowywania bramy aplikacji. Druga podsieć jest używana na zapleczach hostujących aplikację internetową.

  1. Przypisz zakres adresów dla podsieci, która ma być używana dla bramy aplikacji.

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

    Uwaga

    Podsieci skonfigurowane dla bramy aplikacji powinny mieć prawidłowy rozmiar. Bramę aplikacji można skonfigurować dla maksymalnie 10 wystąpień. Każde wystąpienie przyjmuje jeden adres IP z podsieci. Zbyt mała podsieć może negatywnie wpłynąć na skalowanie bramy aplikacji.

  2. Przypisz zakres adresów, który ma być używany dla puli adresów zaplecza.

    $nicSubnet = New-AzVirtualNetworkSubnetConfig  -Name 'appsubnet' -AddressPrefix 10.0.2.0/24
    
  3. Utwórz sieć wirtualną z podsieciami zdefiniowanymi w poprzednich krokach.

    $vnet = New-AzvirtualNetwork -Name 'appgwvnet' -ResourceGroupName appgw-rg -Location "West US" -AddressPrefix 10.0.0.0/16 -Subnet $gwSubnet, $nicSubnet
    
  4. Pobierz zasób sieci wirtualnej i zasoby podsieci, które mają być używane w kolejnych krokach.

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

Tworzenie publicznego adresu IP dla konfiguracji frontonu

Utwórz zasób publicznego adresu IP, który ma być używany dla bramy aplikacji. Ten publiczny adres IP jest używany w jednym z poniższych kroków.

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

Ważne

Usługa Application Gateway nie obsługuje użycia publicznego adresu IP utworzonego za pomocą zdefiniowanej etykiety domeny. Obsługiwany jest tylko publiczny adres IP z dynamicznie utworzoną etykietą domeny. Jeśli potrzebujesz przyjaznej nazwy DNS dla bramy aplikacji, zalecamy użycie rekordu CNAME jako aliasu.

Tworzenie obiektu konfiguracji bramy aplikacji

Wszystkie elementy konfiguracji są ustawiane przed utworzeniem bramy aplikacji. Poniższe kroki umożliwiają utworzenie elementów konfiguracji wymaganych w przypadku zasobu bramy aplikacji.

  1. Utwórz konfigurację adresu IP bramy aplikacji. To ustawienie umożliwia skonfigurowanie podsieci używanych przez bramę aplikacji. Po uruchomieniu bramy aplikacji pobiera ona adres IP ze skonfigurowanej podsieci i kieruje ruch sieciowy do adresów IP w puli adresów IP zaplecza. Pamiętaj, że każde wystąpienie będzie mieć jeden adres IP.

    $gipconfig = New-AzApplicationGatewayIPConfiguration -Name 'gwconfig' -Subnet $gwSubnet
    
  2. Utwórz konfigurację adresu IP frontonu. To ustawienie mapuje prywatny lub publiczny adres IP na fronton bramy aplikacji. Poniższy krok kojarzy publiczny adres IP w poprzednim kroku z konfiguracją adresu IP frontonu.

    $fipconfig = New-AzApplicationGatewayFrontendIPConfig -Name 'fip01' -PublicIPAddress $publicip
    
  3. Skonfiguruj pulę adresów IP zaplecza przy użyciu adresów IP serwerów internetowych zaplecza. Te adresy IP to adresy IP odbierające ruch sieciowy pochodzący z punktu końcowego adresu IP frontonu. Zastąp adresy IP w przykładzie własnymi punktami końcowymi adresów IP aplikacji.

    $pool = New-AzApplicationGatewayBackendAddressPool -Name 'pool01' -BackendIPAddresses 1.1.1.1, 2.2.2.2, 3.3.3.3
    

    Uwaga

    W pełni kwalifikowana nazwa domeny (FQDN) jest również prawidłową wartością używaną zamiast adresu IP dla serwerów zaplecza. Można ją włączyć za pomocą przełącznika -BackendFqdns .

  4. Skonfiguruj port IP frontonu dla publicznego punktu końcowego adresu IP. Ten port to port, z którymi użytkownicy końcowi nawiązują połączenie.

    $fp = New-AzApplicationGatewayFrontendPort -Name 'port01'  -Port 443
    
  5. Skonfiguruj certyfikat dla bramy aplikacji. Ten certyfikat służy do odszyfrowywania i ponownego szyfrowania ruchu w bramie aplikacji.

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

    Uwaga

    Ten przykład umożliwia skonfigurowanie certyfikatu używanego na potrzeby połączenia TLS. Certyfikat musi mieć format pfx.

  6. Utwórz odbiornik HTTP dla bramy aplikacji. Przypisz konfigurację, port i certyfikat TLS/SSL frontonu do użycia.

    $listener = New-AzApplicationGatewayHttpListener -Name listener01 -Protocol Https -FrontendIPConfiguration $fipconfig -FrontendPort $fp -SSLCertificate $cert
    
  7. Przekaż certyfikat do użycia w zasobach puli zaplecza z obsługą protokołu TLS.

    Uwaga

    Domyślna sonda pobiera klucz publiczny z domyślnego powiązania PROTOKOŁU TLS na adres IP zaplecza i porównuje wartość klucza publicznego odbieraną z podanej tutaj wartości klucza publicznego.

    Jeśli używasz nagłówków hostów i wskazania nazwy serwera (SNI) na zapleczu, pobrany klucz publiczny może nie być przeznaczoną lokacją, do której przepływa ruch. Jeśli masz wątpliwości, odwiedź https://127.0.0.1/ serwery zaplecza, aby potwierdzić, który certyfikat jest używany do domyślnego powiązania protokołu TLS. Użyj klucza publicznego z tego żądania w tej sekcji. Jeśli używasz nagłówków hostów i SNI w powiązaniach HTTPS i nie otrzymujesz odpowiedzi i certyfikatu z ręcznego żądania przeglądarki do https://127.0.0.1/ na serwerach zaplecza, musisz skonfigurować domyślne powiązanie TLS na nich. Jeśli tego nie zrobisz, sondy zakończą się niepowodzeniem, a zaplecze nie jest dozwolone.

    Aby uzyskać więcej informacji na temat sieci SNI w usłudze Application Gateway, zobacz Omówienie kończenia żądań protokołu TLS i kompleksowego szyfrowania TLS za pomocą usługi Application Gateway.

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

    Uwaga

    Certyfikat podany w poprzednim kroku powinien być kluczem publicznym certyfikatu pfx obecnego na zapleczu. Wyeksportuj certyfikat (nie certyfikat główny) zainstalowany na serwerze zaplecza w formacie oświadczenia, dowodu i rozumowania (CER) i użyj go w tym kroku. Ten krok umożliwia zaplecze z bramą aplikacji.

    Jeśli używasz jednostki SKU usługi Application Gateway w wersji 2, utwórz zaufany certyfikat główny zamiast certyfikatu uwierzytelniania. Aby uzyskać więcej informacji, zobacz Omówienie kompleksowego protokołu TLS z usługą Application Gateway:

    $trustedRootCert01 = New-AzApplicationGatewayTrustedRootCertificate -Name "test1" -CertificateFile  <path to root cert file>
    
  8. Skonfiguruj ustawienia protokołu HTTP dla zaplecza bramy aplikacji. Przypisz certyfikat przekazany w poprzednim kroku do ustawień PROTOKOŁU HTTP.

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

    W przypadku jednostki SKU usługi Application Gateway w wersji 2 użyj następującego polecenia:

    $poolSetting01 = New-AzApplicationGatewayBackendHttpSettings -Name “setting01” -Port 443 -Protocol Https -CookieBasedAffinity Disabled -TrustedRootCertificate $trustedRootCert01 -HostName "test1"
    
  9. Utwórz regułę routingu modułu równoważenia obciążenia, która konfiguruje zachowanie modułu równoważenia obciążenia. W tym przykładzie jest tworzona podstawowa reguła działania okrężnego.

    $rule = New-AzApplicationGatewayRequestRoutingRule -Name 'rule01' -RuleType basic -BackendHttpSettings $poolSetting -HttpListener $listener -BackendAddressPool $pool
    
  10. Skonfiguruj rozmiar wystąpienia bramy aplikacji. Dostępne rozmiary to Standard_Small, Standard_Medium i Standard_Large. W przypadku pojemności dostępne wartości to od 1 do 10.

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

    Uwaga

    Liczbę wystąpień 1 można wybrać do celów testowych. Ważne jest, aby wiedzieć, że każda liczba wystąpień w dwóch wystąpieniach nie jest objęta umową SLA i dlatego nie jest zalecana. Małe bramy mają być używane do testowania deweloperskiego, a nie do celów produkcyjnych.

  11. Skonfiguruj zasady protokołu TLS, które mają być używane w bramie aplikacji. Usługa Application Gateway obsługuje możliwość ustawiania minimalnej wersji dla wersji protokołu TLS.

    Poniższe wartości to lista wersji protokołu, które można zdefiniować:

    • TLSV1_0
    • TLSV1_1
    • TLSV1_2

    W poniższym przykładzie ustawiono minimalną wersję protokołu na TLSv1_2 i włącza TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 i tylko 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
    

Tworzenie bramy aplikacji

Korzystając ze wszystkich poprzednich kroków, utwórz bramę aplikacji. Tworzenie bramy to proces, który trwa długo.

W przypadku jednostki SKU w wersji 1 użyj poniższego polecenia

$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

W przypadku jednostki SKU w wersji 2 użyj poniższego polecenia

$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

Stosowanie nowego certyfikatu, jeśli certyfikat zaplecza wygasł

Użyj tej procedury, aby zastosować nowy certyfikat, jeśli certyfikat zaplecza wygasł.

  1. Pobierz bramę aplikacji, aby zaktualizować.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Dodaj nowy zasób certyfikatu z pliku cer, który zawiera klucz publiczny certyfikatu, a także może być tym samym certyfikatem dodanym do odbiornika w celu zakończenia protokołu TLS w bramie aplikacji.

    Add-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name 'NewCert' -CertificateFile "appgw_NewCert.cer" 
    
  3. Pobierz nowy obiekt certyfikatu uwierzytelniania do zmiennej (TypeName: Microsoft.Azure.Commands.Network.Models.PSApplicationGatewayAuthenticationCertificate).

    $AuthCert = Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name NewCert
    
  4. Przypisz nowy certyfikat do ustawienia BackendHttp i odwołaj się do niego za pomocą zmiennej $AuthCert. (Określ nazwę ustawienia HTTP, którą chcesz zmienić).

$out= Set-AzApplicationGatewayBackendHttpSetting -ApplicationGateway $gw -Name "HTTP1" -Port 443 -Protocol "Https" -CookieBasedAffinity Disabled -AuthenticationCertificates $Authcert
  1. Zatwierdź zmianę w bramie aplikacji i przekaż nową konfigurację zawartą w zmiennej $out.
Set-AzApplicationGateway -ApplicationGateway $gw  

Usuwanie nieużywanego wygasłego certyfikatu z Ustawienia HTTP

Użyj tej procedury, aby usunąć nieużywany wygasły certyfikat z Ustawienia HTTP.

  1. Pobierz bramę aplikacji, aby zaktualizować.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Wyświetl nazwę certyfikatu uwierzytelniania, który chcesz usunąć.

    Get-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw | select name
    
  3. Usuń certyfikat uwierzytelniania z bramy aplikacji.

    $gw=Remove-AzApplicationGatewayAuthenticationCertificate -ApplicationGateway $gw -Name ExpiredCert
    
  4. Zatwierdź zmianę.

Set-AzApplicationGateway -ApplicationGateway $gw

Ograniczanie wersji protokołu TLS w istniejącej bramie aplikacji

Poprzednie kroki wykonano przez proces tworzenia aplikacji z kompleksową obsługą protokołu TLS i wyłączaniem niektórych wersji protokołu TLS. Poniższy przykład wyłącza niektóre zasady PROTOKOŁU TLS w istniejącej bramie aplikacji.

  1. Pobierz bramę aplikacji, aby zaktualizować.

    $gw = Get-AzApplicationGateway -Name AdatumAppGateway -ResourceGroupName AdatumAppGatewayRG
    
  2. Zdefiniuj zasady protokołu TLS. W poniższym przykładzie tlsv1.0 i TLSv1.1 są wyłączone, a zestawy szyfrowania TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 i TLS_RSA_WITH_AES_128_GCM_SHA256 są jedynymi dozwolonymi.

    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. Na koniec zaktualizuj bramę. Ten ostatni krok jest długotrwałym zadaniem. Po zakończeniu kompleksowe szyfrowanie TLS jest konfigurowane w bramie aplikacji.

    $gw | Set-AzApplicationGateway
    

Uzyskiwanie nazwy DNS bramy aplikacji

Po utworzeniu bramy następnym krokiem jest skonfigurowanie frontonu na potrzeby komunikacji. Usługa Application Gateway wymaga dynamicznie przypisanej nazwy DNS w przypadku korzystania z publicznego adresu IP, który nie jest przyjazny. Aby zapewnić użytkownikom końcowym dostęp do bramy aplikacji, możesz użyć rekordu CNAME, aby wskazać publiczny punkt końcowy bramy aplikacji. Aby uzyskać więcej informacji, zobacz Konfigurowanie niestandardowej nazwy domeny dla platformy Azure.

Aby skonfigurować alias, pobierz szczegóły bramy aplikacji i skojarzonej z nią nazwy IP/DNS przy użyciu elementu PublicIPAddress dołączonego do bramy aplikacji. Użyj nazwy DNS bramy aplikacji, aby utworzyć rekord CNAME, który wskazuje dwie aplikacje internetowe na tę nazwę DNS. Nie zalecamy używania rekordów A, ponieważ adres VIP może ulec zmianie po ponownym uruchomieniu bramy aplikacji.

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

Następne kroki

Aby uzyskać więcej informacji na temat wzmacniania zabezpieczeń aplikacji internetowych za pomocą zapory aplikacji internetowej za pośrednictwem usługi Application Gateway, zobacz Omówienie zapory aplikacji internetowej.