Zabezpieczanie niestandardowej nazwy DNS za pomocą powiązania TLS/SSL w Azure App Service

W tym artykule pokazano, jak zabezpieczyć domenę niestandardową w aplikacji App Service lub aplikacji funkcji przez utworzenie powiązania certyfikatu. Po zakończeniu możesz uzyskać dostęp do aplikacji App Service w punkcie końcowym niestandardowej https:// nazwy DNS (na przykład https://www.contoso.com).

Aplikacja internetowa z niestandardowym certyfikatem TLS/SSL

Wymagania wstępne

1. Dodaj powiązanie

W Azure Portal:

  1. W menu po lewej stronie wybierz pozycjęNazwa> aplikacji usługi App Services<>.

  2. W obszarze nawigacji po lewej stronie aplikacji wybierz pozycję Domeny niestandardowe

  3. Obok domeny niestandardowej wybierz pozycję Dodaj powiązanie

    Zrzut ekranu przedstawiający sposób uruchamiania okna dialogowego Dodawanie powiązania PROTOKOŁU TLS/SSL.

  4. Jeśli aplikacja ma już certyfikat dla wybranej domeny niestandardowej, możesz ją wybrać w obszarze Certyfikat. Jeśli nie, musisz dodać certyfikat przy użyciu jednego z wybranych opcji w obszarze Źródło.

    • Tworzenie certyfikatu zarządzanego App Service — App Service utworzyć certyfikat zarządzany dla wybranej domeny. Ta opcja jest najprostsza. Aby uzyskać więcej informacji, zobacz Tworzenie bezpłatnego certyfikatu zarządzanego.
    • Importuj certyfikat App Service — w App Service Certificate (Certyfikat App Service) wybierz certyfikat App Service zakupiony dla wybranej domeny.
    • Przekaż certyfikat (pfx) — postępuj zgodnie z przepływem pracy w sekcji Przekazywanie certyfikatu prywatnego , aby przekazać certyfikat PFX z komputera lokalnego i określić hasło certyfikatu.
    • Importuj z Key Vault — wybierz pozycję Wybierz certyfikat magazynu kluczy i wybierz certyfikat w oknie dialogowym.
  5. W typie PROTOKOŁU TLS/SSL wybierz protokół SSL SNI i protokół SSL oparty na protokole IP.

    • SNI SSL: można dodać wiele powiązań SSL SNI. Ta opcja umożliwia zabezpieczanie wielu domen na tym samym adresie IP wielu certyfikatów TLS/SSL. Większość nowoczesnych przeglądarek (w tym Internet Explorer, Chrome, Firefox i Opera) obsługuje SNI (aby uzyskać więcej informacji, zobacz Wskazanie nazwy serwera).
      • Protokół SSL oparty na protokole IP: można dodać tylko jedno powiązanie SSL ip. Ta opcja umożliwia zabezpieczanie dedykowanego publicznego adresu IP tylko jednego certyfikatu TLS/SSL. Po skonfigurowaniu powiązania wykonaj kroki opisane w 2. Ponowne mapowanie rekordów dla protokołu SSL opartego na protokole IP.
        Protokół IP SSL jest obsługiwany tylko w warstwie Podstawowa lub wyższej.
  6. Podczas dodawania nowego certyfikatu zweryfikuj nowy certyfikat, wybierając pozycję Weryfikuj.

  7. Wybierz pozycję Dodaj.

    Po zakończeniu operacji stan PROTOKOŁU TLS/SSL domeny niestandardowej zostanie zmieniony na Bezpieczny.

    Zrzut ekranu przedstawiający domenę niestandardową zabezpieczoną przez powiązanie certyfikatu.

Uwaga

Bezpieczny stan w domenach niestandardowych oznacza, że jest zabezpieczony za pomocą certyfikatu, ale App Service nie sprawdza, czy certyfikat jest podpisany samodzielnie lub wygasł, co może również spowodować, że przeglądarki będą wyświetlać błąd lub ostrzeżenie.

2. Ponowne mapowanie rekordów dla protokołu SSL opartego na protokole IP

Ten krok jest wymagany tylko w przypadku protokołu SSL opartego na protokole IP. W przypadku powiązania ssl SNI przejdź do sekcji Testowanie protokołu HTTPS dla domeny niestandardowej.

Istnieją dwie zmiany, które należy wprowadzić, potencjalnie:

  • Domyślnie aplikacja używa udostępnionego publicznego adresu IP. Po powiązaniu certyfikatu z protokołem IP SSL App Service tworzy nowy, dedykowany adres IP dla aplikacji. Jeśli rekord A został zamapowany na aplikację, zaktualizuj rejestr domen przy użyciu tego nowego, dedykowanego adresu IP.

    Strona Domena niestandardowa Twojej aplikacji zostanie zaktualizowana za pomocą nowego, dedykowanego adresu IP. Skopiuj ten adres IP, a następnie ponownie zamapuj rekord A na ten nowy adres IP.

  • Jeśli masz powiązanie SSL SNI z <app-name>.azurewebsites.net, ponownie zamapujsni dowolne mapowanie CNAME, aby wskazać sni.<app-name>.azurewebsites.net zamiast tego (dodaj prefiks).

3. Testowanie protokołu HTTPS

W różnych przeglądarkach przejdź do https://<your.custom.domain> strony , aby sprawdzić, czy obsługuje aplikację.

Zrzut ekranu przedstawiający przykład przeglądania domeny niestandardowej z wyróżnionym adresem URL contoso.com.

Kod aplikacji może sprawdzić protokół za pomocą nagłówka "x-appservice-proto". Nagłówek ma wartość http lub https.

Uwaga

Jeśli Twoja aplikacja wyświetla błędy walidacji certyfikatu, prawdopodobnie używasz certyfikatu z podpisem własnym.

Jeśli tak nie jest, certyfikaty pośrednie mogły zostać pominięte podczas eksportowania certyfikatu do pliku PFX.

Często zadawane pytania

Jak mogę upewnić się, że adres IP aplikacji nie zmienia się po wprowadzeniu zmian w powiązaniu certyfikatu?

Adres IP dla ruchu przychodzącego może ulec zmianie po usunięciu powiązania, nawet jeśli to powiązanie jest protokołem IP SSL. Jest to szczególnie ważne podczas odnawiania certyfikatu, który jest już w powiązaniu PROTOKOŁU SSL IP. Aby uniknąć zmian w adresie IP aplikacji, wykonaj kolejno następujące kroki:

  1. Przekaż nowy certyfikat.
  2. Powiąż nowy certyfikat z wybraną domeną niestandardową bez usuwania starego certyfikatu. Ta akcja zastępuje powiązanie zamiast usuwania go.
  3. Usuń stary certyfikat.

Czy mogę wyłączyć wymuszone przekierowanie z protokołu HTTP do protokołu HTTPS?

Domyślnie App Service wymusza przekierowanie z żądań HTTP do protokołu HTTPS. Aby wyłączyć to zachowanie, zobacz Konfigurowanie ustawień ogólnych.

Jak mogę zmienić minimalną wersję protokołu TLS dla aplikacji?

Aplikacja domyślnie umożliwia korzystanie z protokołu TLS 1.2, który jest zalecanym poziomem protokołu TLS przez standardy branżowe, takie jak PCI DSS. Aby wymusić różne wersje protokołu TLS, zobacz Konfigurowanie ustawień ogólnych.

Jak mogę obsługiwać kończenie żądań protokołu TLS w App Service?

W App Service zakończenie protokołu TLS odbywa się w modułach równoważenia obciążenia sieciowego, więc wszystkie żądania HTTPS docierają do aplikacji jako niezaszyfrowane żądania HTTP. Jeśli logika aplikacji musi sprawdzać, czy żądania użytkownika są szyfrowane, czy nie, zbadaj nagłówek X-Forwarded-Proto.

Przewodniki konfiguracyjne specyficzne dla języka, takie jak przewodnik konfiguracji systemu Linux Node.js , pokazuje, jak wykryć sesję HTTPS w kodzie aplikacji.

Automatyzowanie przy użyciu skryptów

Interfejs wiersza polecenia platformy Azure

Wiązanie niestandardowego certyfikatu TLS/SSL z aplikacją internetową

PowerShell

$fqdn="<Replace with your custom domain name>"
$pfxPath="<Replace with path to your .PFX file>"
$pfxPassword="<Replace with your .PFX password>"
$webappname="mywebapp$(Get-Random)"
$location="West Europe"

# Create a resource group.
New-AzResourceGroup -Name $webappname -Location $location

# Create an App Service plan in Free tier.
New-AzAppServicePlan -Name $webappname -Location $location `
-ResourceGroupName $webappname -Tier Free

# Create a web app.
$webapp = New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Sign in to your domain provider's website and configure the following records:"
Write-Host "A CNAME record that maps $fqdn to $webappname.azurewebsites.net"
Write-Host "A TXT record that maps asuid.$fqdn to the domain verification ID $($webapp.CustomDomainVerificationId)"
Read-Host "Press [Enter] key when ready ..."

# Before continuing, go to your DNS configuration UI for your custom domain and follow the 
# instructions at https://aka.ms/appservicecustomdns to configure a CNAME record for the 
# hostname "www" and point it your web app's default domain name.

# Upgrade App Service plan to Basic tier (minimum required by custom SSL certificates)
Set-AzAppServicePlan -Name $webappname -ResourceGroupName $webappname `
-Tier Basic

# Add a custom domain name to the web app. 
Set-AzWebApp -Name $webappname -ResourceGroupName $webappname `
-HostNames @($fqdn,"$webappname.azurewebsites.net")

# Upload and bind the SSL certificate to the web app.
New-AzWebAppSSLBinding -WebAppName $webappname -ResourceGroupName $webappname -Name $fqdn `
-CertificateFilePath $pfxPath -CertificatePassword $pfxPassword -SslState SniEnabled

Więcej zasobów