Защита пользовательского DNS-имени с помощью привязки TLS/SSL в Службе приложений AzureSecure a custom DNS name with a TLS/SSL binding in Azure App Service

В этой статье показано, как защитить личный домен в приложении Службы приложений или приложении-функции путем создания привязки к сертификату.This article shows you how to secure the custom domain in your App Service app or function app by creating a certificate binding. По завершении работы с этой статьей вы сможете получить доступ к приложению Службы приложений в конечной точке https:// для настраиваемого DNS-имени (например, https://www.contoso.com).When you're finished, you can access your App Service app at the https:// endpoint for your custom DNS name (for example, https://www.contoso.com).

Веб-приложение с настраиваемым TLS/SSL-сертификатом

Обеспечение защиты личного домена с использованием сертификата состоит из двух этапов.Securing a custom domain with a certificate involves two steps:

В этом руководстве описано следующее:In this tutorial, you learn how to:

  • Выбор более высокой ценовой категории.Upgrade your app's pricing tier
  • Защита личного домена с помощью сертификата.Secure a custom domain with a certificate
  • Принудительное использование HTTPSEnforce HTTPS
  • Принудительное применение TLS 1.1/1.2Enforce TLS 1.1/1.2
  • автоматизация управления TLS с помощью скриптов.Automate TLS management with scripts

Предварительные требованияPrerequisites

Ознакомьтесь со следующими статьями:To follow this how-to guide:

Примечание

Проще всего добавить закрытый сертификат, создав бесплатный управляемый сертификат Службы приложений (предварительная версия).The easiest way to add a private certificate is to create a free App Service Managed Certificate (Preview).

Подготовка веб-приложенияPrepare your web app

Чтобы привязать пользовательскую привязку безопасности или разрешить сертификаты клиента для приложения Службы приложений, вам нужен план службы приложений одной из следующих ценовых категорий: Базовый , Стандартный , Премиум или Изолированный .To create custom security bindings or enable client certificates for your App Service app, your App Service plan must be in the Basic , Standard , Premium , or Isolated tier. На этом шаге следует убедиться, что веб-приложение находится в поддерживаемой ценовой категории.In this step, you make sure that your web app is in the supported pricing tier.

Вход в AzureSign in to Azure

Откройте портал Azure.Open the Azure portal.

Найдите в поиске и выберите Службы приложений .Search for and select App Services .

Выбор служб приложений

На странице Службы приложений выберите имя веб-приложения.On the App Services page, select the name of your web app.

Снимок экрана: страница "Службы приложений" на портале Azure, на которой отображается список всех работающих веб-приложений с выделенным первым приложением в списке.

Вы попадете на страницу управления веб-приложением.You have landed on the management page of your web app.

Проверка ценовой категорииCheck the pricing tier

В левой области навигации страницы веб-приложения перейдите к разделу Параметры и выберите Увеличить масштаб (план службы приложений) .In the left-hand navigation of your web app page, scroll to the Settings section and select Scale up (App Service plan) .

Меню увеличения масштаба

Убедитесь, что веб-приложение не находится в ценовой категории F1 или D1 .Check to make sure that your web app is not in the F1 or D1 tier. Текущая ценовая категория веб-приложения выделена синей рамкой.Your web app's current tier is highlighted by a dark blue box.

Проверка ценовой категории

Настраиваемые SSL-сертификаты не поддерживаются в ценовых категориях F1 или D1 .Custom SSL is not supported in the F1 or D1 tier. Если вам нужно перевести приложение в другую ценовую категорию, выполните действия в следующем разделе.If you need to scale up, follow the steps in the next section. В противном случае закройте страницу изменения уровня плана и пропустите раздел изменения уровня плана службы приложений.Otherwise, close the Scale up page and skip the Scale up your App Service plan section.

Изменение уровня плана службы приложенийScale up your App Service plan

Выберите любой оплачиваемый уровень ( B1 , В2 , B3 или любой уровень в категории Рабочие ).Select any of the non-free tiers ( B1 , B2 , B3 , or any tier in the Production category). Чтобы просмотреть дополнительные параметры, щелкните См. дополнительные параметры .For additional options, click See additional options .

Нажмите кнопку Применить .Click Apply .

Выбор ценовой категории

Если вы увидите уведомление ниже, значит уровень плана службы приложений изменен.When you see the following notification, the scale operation is complete.

Уведомление об увеличении масштаба

Защита личного доменаSecure a custom domain

Выполните следующие шаги:Do the following steps:

На портале Azure в меню слева выберите Службы приложений > <app-name> .In the Azure portal, from the left menu, select App Services > <app-name>.

В левой области навигации приложения запустите диалоговое окно Привязка TLS/SSL, выполнив одно из приведенных ниже действий.From the left navigation of your app, start the TLS/SSL Binding dialog by:

  • Выберите Личные домены > Добавить привязку.Selecting Custom domains > Add binding
  • Выберите Параметры TLS/SSL > Добавить привязку TLS/SSL.Selecting TLS/SSL settings > Add TLS/SSL binding

Добавка привязки к домену

В области Личный домен выберите личный домен, для которого необходимо добавить привязку.In Custom Domain, select the custom domain you want to add a binding for.

Если у приложения уже есть сертификат для выбранного личного домена, перейдите напрямую к разделу Создание привязки.If your app already has a certificate for the selected custom domain, go to Create binding directly. В противном случае продолжайте работу.Otherwise, keep going.

Добавление сертификата для личного доменаAdd a certificate for custom domain

Если у приложения нет сертификата для выбранного личного домена, у вас есть два варианта:If your app has no certificate for the selected custom domain, then you have two options:

  • Отправить сертификат PFX. Для этого выполните инструкции из раздела Upload a private certificate (Передача закрытого сертификата), а затем выберите этот вариант.Upload PFX Certificate - Follow the workflow at Upload a private certificate, then select this option here.
  • Импортировать сертификат Службы приложений. Для этого выполните инструкции из раздела Import an App Service Certificate (Импорт сертификата Службы приложений), а затем выберите этот вариант.Import App Service Certificate - Follow the workflow at Import an App Service certificate, then select this option here.

Примечание

Вы также можете создать бесплатный сертификат (предварительная версия) или импортировать сертификат Key Vault, но это нужно сделать отдельно, а затем вернуться в диалоговое окно Привязка TLS/SSL.You can also Create a free certificate (Preview) or Import a Key Vault certificate, but you must do it separately and then return to the TLS/SSL Binding dialog.

Создание привязкиCreate binding

Чтобы настроить привязку TLS в диалоговом окне Привязка TLS/SSL, воспользуйтесь сведениями из следующей таблицы и щелкните Добавить привязку.Use the following table to help you configure the TLS binding in the TLS/SSL Binding dialog, then click Add Binding.

ПараметрSetting ОписаниеDescription
Личный доменCustom domain Имя домена, для которого будет добавлена привязка TLS/SSL.The domain name to add the TLS/SSL binding for.
Отпечаток закрытого сертификатаPrivate Certificate Thumbprint Привязка сертификата.The certificate to bind.
Тип TLS/SSLTLS/SSL Type
  • SSL на основе SNI позволяет добавить несколько привязок SSL на основе SNI.SNI SSL - Multiple SNI SSL bindings may be added. Этот параметр позволяет указать несколько TLS/SSL-сертификатов для защиты нескольких доменов с одним IP-адресом.This option allows multiple TLS/SSL certificates to secure multiple domains on the same IP address. Большинство современных браузеров (включая Internet Explorer, Chrome, Firefox и Opera) поддерживает SNI (дополнительные сведения см. в статье Server Name Indication).Most modern browsers (including Internet Explorer, Chrome, Firefox, and Opera) support SNI (for more information, see Server Name Indication).
  • SSL на основе IP позволяет добавить только одну привязку SSL на основе IP.IP SSL - Only one IP SSL binding may be added. Этот параметр позволяет указать только один TLS/SSL-сертификат для защиты выделенного общедоступного IP-адреса.This option allows only one TLS/SSL certificate to secure a dedicated public IP address. После настройки привязки воспользуйтесь сведениями из раздела Переназначение записи для SSL на основе IP-адреса.After you configure the binding, follow the steps in Remap records for IP SSL.
    SSL на основе IP-адреса поддерживается только на уровне "Стандартный" или выше.IP SSL is supported only in Standard tier or above.

После завершения операции состояние TLS/SSL личного домена меняется на Безопасный.Once the operation is complete, the custom domain's TLS/SSL state is changed to Secure.

Удачно выполненная привязка TLS/SSL

Примечание

Состояние Защищено личного домена означает, что он защищен с помощью сертификата, но Служба приложений не проверяет, например, является ли сертификат самозаверяющим или действительным, что также может привести к отображению ошибки или предупреждения в браузере.A Secure state in the Custom domains means that it is secured with a certificate, but App Service doesn't check if the certificate is self-signed or expired, for example, which can also cause browsers to show an error or warning.

Повторное сопоставление записей для SSL на основе IP-адресовRemap records for IP SSL

Если вы не используете SSL на основе IP в приложении, перейдите к разделу Тестирование HTTPS.If you don't use IP SSL in your app, skip to Test HTTPS for your custom domain.

Возможно, вам потребуется внести два изменения:There are two changes you need to make, potentially:

  • По умолчанию приложение использует общий общедоступный IP-адрес.By default, your app uses a shared public IP address. После привязки сертификата с помощью SSL на основе IP Служба приложений создает выделенный IP-адрес для вашего приложения.When you bind a certificate with IP SSL, App Service creates a new, dedicated IP address for your app. Если с приложением сопоставлена запись A, обновите реестр домена, указав этот новый выделенный IP-адрес.If you mapped an A record to your app, update your domain registry with this new, dedicated IP address.

    Он появится на странице Личный домен вашего приложения.Your app's Custom domain page is updated with the new, dedicated IP address. Скопируйте этот IP-адрес, затем переназначьте его записи A.Copy this IP address, then remap the A record to this new IP address.

  • При наличии привязки SSL на основе SNI к <app-name>.azurewebsites.net повторно сопоставьте все сопоставления CNAME, чтобы они указывали на sni.<app-name>.azurewebsites.net (добавьте префикс sni).If you have an SNI SSL binding to <app-name>.azurewebsites.net, remap any CNAME mapping to point to sni.<app-name>.azurewebsites.net instead (add the sni prefix).

Тестирование HTTPSTest HTTPS

В разных браузерах перейдите по адресу https://<your.custom.domain>, чтобы проверить, как он обслуживает ваше приложение.In various browsers, browse to https://<your.custom.domain> to verify that it serves up your app.

Снимок экрана: пример перехода к странице личного домена с выделенным URL-адресом contoso.com.

Код приложения может проверить протокол с помощью заголовка x-appservice-proto.Your application code can inspect the protocol via the "x-appservice-proto" header. Заголовок будет иметь значение http или https.The header will have a value of http or https.

Примечание

Если приложение выдает ошибки проверки сертификата, вероятно, вы используете самозаверяющий сертификат.If your app gives you certificate validation errors, you're probably using a self-signed certificate.

Если это не так, возможно, вы пропустили промежуточные сертификаты при экспорте сертификата в PFX-файл.If that's not the case, you may have left out intermediate certificates when you export your certificate to the PFX file.

Предотвращение изменений IP-адресаPrevent IP changes

Входящий IP-адрес может измениться после удаления привязки, даже если привязка сделана на базе SSL на основе IP.Your inbound IP address can change when you delete a binding, even if that binding is IP SSL. Это особенно важно при обновлении сертификата, который уже связан с привязкой SSL на основе IP.This is especially important when you renew a certificate that's already in an IP SSL binding. Чтобы избежать изменения IP-адреса приложения, выполните по очереди следующие действия:To avoid a change in your app's IP address, follow these steps in order:

  1. Передайте новый сертификат.Upload the new certificate.
  2. Привяжите новый сертификат к пользовательскому домену, не удаляя старый сертификат.Bind the new certificate to the custom domain you want without deleting the old one. Таким образом вы замените привязку, а не удалите старый сертификат.This action replaces the binding instead of removing the old one.
  3. Удалите старый сертификат.Delete the old certificate.

Принудительное использование HTTPSEnforce HTTPS

По умолчанию любой пользователь по-прежнему может получить доступ к вашему приложению с помощью HTTP.By default, anyone can still access your app using HTTP. Вы можете перенаправить все HTTP-запросы на HTTPS-порт.You can redirect all HTTP requests to the HTTPS port.

На странице приложения в области слева выберите Параметры SSL.In your app page, in the left navigation, select SSL settings. Затем в окне Только HTTPSвыберите ВКЛ.Then, in HTTPS Only, select On.

Принудительное использование HTTPS

По завершении операции перейдите по любому из URL-адресов HTTP, которые указывают на ваше приложение.When the operation is complete, navigate to any of the HTTP URLs that point to your app. Пример:For example:

  • http://<app_name>.azurewebsites.net
  • http://contoso.com
  • http://www.contoso.com

Принудительное применение версий TLSEnforce TLS versions

Приложение по умолчанию разрешает применение TLS версии 1.2, которая является рекомендуемой в соответствии с такими отраслевыми стандартами, как PCI DSS.Your app allows TLS 1.2 by default, which is the recommended TLS level by industry standards, such as PCI DSS. Чтобы принудительно применить другую версию TLS сделайте следующее:To enforce different TLS versions, follow these steps:

На странице приложения в области слева выберите Параметры SSL.In your app page, in the left navigation, select SSL settings. Затем в разделе версии TLS выберите минимальную требуемую версию TLS.Then, in TLS version, select the minimum TLS version you want. Этот параметр определяет только входящие вызовы.This setting controls the inbound calls only.

Принудительное использование TLS 1.1 или 1.2

После этой операции приложение отклоняет все подключения с более ранними версиями TLS.When the operation is complete, your app rejects all connections with lower TLS versions.

Обработка терминирования TLS/SSLHandle TLS termination

В Службе приложений терминирование TLS происходит в подсистеме балансировки нагрузки сети, поэтому все HTTPS-запросы достигают вашего приложения в виде незашифрованных HTTP-запросов.In App Service, TLS termination happens at the network load balancers, so all HTTPS requests reach your app as unencrypted HTTP requests. Если логика вашего приложения проверяет, зашифрованы ли пользовательские запросы, проверяйте заголовок X-Forwarded-Proto.If your app logic needs to check if the user requests are encrypted or not, inspect the X-Forwarded-Proto header.

Руководства по настройке для конкретного языка, например руководство по настройке Node.js в Linux, описывают возможность обнаруживать сеанс HTTPS в коде приложения.Language specific configuration guides, such as the Linux Node.js configuration guide, shows you how to detect an HTTPS session in your application code.

Автоматизация с помощью сценариевAutomate with scripts

Azure CLIAzure CLI

#!/bin/bash

fqdn=<replace-with-www.{yourdomain}>
pfxPath=<replace-with-path-to-your-.PFX-file>
pfxPassword=<replace-with-your=.PFX-password>
resourceGroup=myResourceGroup
webappname=mywebapp$RANDOM

# Create a resource group.
az group create --location westeurope --name $resourceGroup

# Create an App Service plan in Basic tier (minimum required by custom domains).
az appservice plan create --name $webappname --resource-group $resourceGroup --sku B1

# Create a web app.
az webapp create --name $webappname --resource-group $resourceGroup \
--plan $webappname

echo "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
read -p "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.

# Map your prepared custom domain name to the web app.
az webapp config hostname add --webapp-name $webappname --resource-group $resourceGroup \
--hostname $fqdn

# Upload the SSL certificate and get the thumbprint.
thumbprint=$(az webapp config ssl upload --certificate-file $pfxPath \
--certificate-password $pfxPassword --name $webappname --resource-group $resourceGroup \
--query thumbprint --output tsv)

# Binds the uploaded SSL certificate to the web app.
az webapp config ssl bind --certificate-thumbprint $thumbprint --ssl-type SNI \
--name $webappname --resource-group $resourceGroup

echo "You can now browse to https://$fqdn"

PowerShellPowerShell

$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.
New-AzWebApp -Name $webappname -Location $location -AppServicePlan $webappname `
-ResourceGroupName $webappname

Write-Host "Configure a CNAME record that maps $fqdn to $webappname.azurewebsites.net"
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

Дополнительные ресурсыMore resources