Защита пользовательского DNS-имени с помощью привязки TLS/SSL в Службе приложений Azure

В этой статье показано, как защитить личный домен в приложении Службы приложений или приложении-функции путем создания привязки к сертификату. По завершении работы с этой статьей вы сможете получить доступ к приложению Службы приложений в конечной точке https:// для настраиваемого DNS-имени (например, https://www.contoso.com).

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

Обеспечение защиты личного домена с использованием сертификата состоит из двух этапов.

В этом руководстве описано следующее:

  • Выбор более высокой ценовой категории.
  • Защита личного домена с помощью сертификата.
  • Принудительное использование HTTPS
  • Принудительное применение TLS 1.1/1.2
  • автоматизация управления TLS с помощью скриптов.

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

Ознакомьтесь со следующими статьями:

Примечание

Проще всего добавить закрытый сертификат, создав бесплатный управляемый сертификат Службы приложений.

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

Чтобы создать пользовательские привязки TLS/SSL или разрешить сертификаты клиента для приложения Службы приложений, вам нужен план службы приложений одной из следующих ценовых категорий: Базовый, Стандартный, Премиум или Изолированный. Чтобы убедиться, что веб-приложение находится в поддерживаемой ценовой категории, выполните следующие действия:

Перейдите к своему веб-приложению.

  1. В поле поиска на портале Microsoft Azure выполните поиск по запросу Службы приложений и выберите соответствующий пункт.

    Снимок экрана портала Azure, поля поиска и выбранных

  2. На странице Службы приложений выберите имя веб-приложения.

    Снимок экрана: страница

    Теперь вы находитесь на странице управления веб-приложения.

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

  1. В левом меню для веб-приложения в разделе Настройки выберите Вертикально увеличить масштаб (план службы приложений).

    Снимок экрана меню веб-приложения, раздел

  2. Убедитесь, что веб-приложение не используется на уровне F1 или D1, на котором не поддерживается настраиваемый протокол TLS/SSL.

    Текущая ценовая категория веб-приложения выделена синей рамкой.

    Снимок экрана информации о ценовой категории веб-приложения.

  3. Если вам нужно перевести приложение в другую ценовую категорию, выполните действия в следующем разделе. В противном случае закройте страницу изменения уровня плана и пропустите раздел изменения уровня плана службы приложений.

Изменение уровня плана службы приложений

  1. Выберите любой оплачиваемый уровень (B1, В2, B3 или любой другой уровень в категории Рабочие). Чтобы просмотреть дополнительные параметры, выберите См. дополнительные параметры.

  2. Закончив, нажмите кнопку Применить.

    Снимок экрана ценовой категории и нажата кнопка

    Когда появится следующее сообщение, операция масштабирования будет завершена.

    Снимок экрана с сообщением о подтверждении операции масштабирования.

Защита личного домена

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

На портале Azure в меню слева выберите Службы приложений><имя_приложения>.

В левой области навигации приложения запустите диалоговое окно Привязка TLS/SSL, выполнив одно из приведенных ниже действий.

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

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

В области Личный домен выберите личный домен, для которого необходимо добавить привязку.

Если у приложения уже есть сертификат для выбранного личного домена, перейдите напрямую к разделу Создание привязки. В противном случае продолжайте работу.

Добавление сертификата для личного домена

Если у приложения нет сертификата для выбранного личного домена, у вас есть два варианта:

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

Примечание

Вы также можете создать бесплатный сертификат или импортировать сертификат Key Vault, но это нужно сделать отдельно, а затем вернуться в диалоговое окно Привязка TLS/SSL.

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

Чтобы настроить привязку TLS в диалоговом окне Привязка TLS/SSL, воспользуйтесь сведениями из следующей таблицы и щелкните Добавить привязку.

Параметр Описание
Личный домен Имя домена, для которого будет добавлена привязка TLS/SSL.
Отпечаток закрытого сертификата Привязка сертификата.
Тип TLS/SSL
  • SSL на основе SNI позволяет добавить несколько привязок SSL на основе SNI. Этот параметр позволяет указать несколько TLS/SSL-сертификатов для защиты нескольких доменов с одним IP-адресом. Большинство современных браузеров (включая Internet Explorer, Chrome, Firefox и Opera) поддерживает SNI (дополнительные сведения см. в статье Server Name Indication).
  • SSL на основе IP позволяет добавить только одну привязку SSL на основе IP. Этот параметр позволяет указать только один TLS/SSL-сертификат для защиты выделенного общедоступного IP-адреса. После настройки привязки воспользуйтесь сведениями из раздела Переназначение записи для SSL на основе IP-адреса.
    SSL на основе IP-адреса поддерживается только на уровне "Стандартный" или выше.

После завершения операции состояние TLS/SSL личного домена меняется на Безопасный.

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

Примечание

Состояние Защищеноличного домена означает, что он защищен с помощью сертификата, но Служба приложений не проверяет, например, является ли сертификат самозаверяющим или действительным, что также может привести к отображению ошибки или предупреждения в браузере.

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

Если вы не используете SSL на основе IP в приложении, перейдите к разделу Тестирование HTTPS.

Возможно, вам потребуется внести два изменения:

  • По умолчанию приложение использует общий общедоступный IP-адрес. После привязки сертификата с помощью SSL на основе IP Служба приложений создает выделенный IP-адрес для вашего приложения. Если с приложением сопоставлена запись A, обновите реестр домена, указав этот новый выделенный IP-адрес.

    Он появится на странице Личный домен вашего приложения. Скопируйте этот IP-адрес, затем переназначьте его записи A.

  • При наличии привязки SSL на основе SNI к <app-name>.azurewebsites.netповторно сопоставьте все сопоставления CNAME, чтобы они указывали на sni.<app-name>.azurewebsites.net (добавьте префикс sni).

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

В разных браузерах перейдите по адресу https://<your.custom.domain>, чтобы проверить, как он обслуживает ваше приложение.

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

Код приложения может проверить протокол с помощью заголовка x-appservice-proto. Заголовок будет иметь значение http или https.

Примечание

Если приложение выдает ошибки проверки сертификата, вероятно, вы используете самозаверяющий сертификат.

Если это не так, возможно, вы пропустили промежуточные сертификаты при экспорте сертификата в PFX-файл.

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

Входящий IP-адрес может измениться после удаления привязки, даже если привязка сделана на базе SSL на основе IP. Это особенно важно при обновлении сертификата, который уже связан с привязкой SSL на основе IP. Чтобы избежать изменения IP-адреса приложения, выполните по очереди следующие действия:

  1. Передайте новый сертификат.
  2. Привяжите новый сертификат к пользовательскому домену, не удаляя старый сертификат. Таким образом вы замените привязку, а не удалите старый сертификат.
  3. Удалите старый сертификат.

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

На странице приложения в области слева выберите Параметры TLS/SSL. Затем в окне Только HTTPSвыберите ВКЛ.

Если выбран параметр Только HTTPS, Выкл, это означает, что любой пользователь по-прежнему может получить доступ к приложению по протоколу HTTP. Вы можете перенаправить все HTTP-запросы на HTTPS-порт, выбрав значение Вкл.

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

По завершении операции перейдите по любому из URL-адресов HTTP, которые указывают на ваше приложение. Пример:

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

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

Приложение по умолчанию разрешает применение TLS версии 1.2, которая является рекомендуемой в соответствии с такими отраслевыми стандартами, как PCI DSS. Чтобы принудительно применить другую версию TLS сделайте следующее:

На странице приложения в области слева выберите Параметры TLS/SSL. Затем в разделе версии TLS выберите минимальную требуемую версию TLS. Этот параметр определяет только входящие вызовы.

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

После этой операции приложение отклоняет все подключения с более ранними версиями TLS.

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

В Службе приложений терминирование TLS происходит в подсистеме балансировки нагрузки сети, поэтому все HTTPS-запросы достигают вашего приложения в виде незашифрованных HTTP-запросов. Если логика вашего приложения проверяет, зашифрованы ли пользовательские запросы, проверяйте заголовок X-Forwarded-Proto.

Руководства по настройке для конкретного языка, например руководство по настройке Node.js в Linux, описывают возможность обнаруживать сеанс HTTPS в коде приложения.

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

Azure CLI

Привязка пользовательского TLS/SSL-сертификата к веб-приложению

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.
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

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