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

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

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

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

1. Добавление привязки

На портале Azure

  1. В меню слева выберите Имя приложения Служб приложений><>.

  2. В левой области навигации приложения выберите Личные домены.

  3. Рядом с личным доменом выберите Добавить привязку.

    Снимок экрана: запуск диалогового окна

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

    • Создание управляемого сертификата Служба приложений — Служба приложений создайте управляемый сертификат для выбранного домена. Это самый простой вариант. Дополнительные сведения см. в статье Создание бесплатного управляемого сертификата.
    • Импорт сертификата Служба приложений. В Служба приложений Certificate выберите сертификат Служба приложений, приобретенный для выбранного домена.
    • Отправить сертификат (PFX-файл). Выполните рабочий процесс в разделе Отправка закрытого сертификата , чтобы отправить PFX-сертификат с локального компьютера и укажите пароль сертификата.
    • Импорт из Key Vault — выберите Выбрать сертификат хранилища ключей и выберите сертификат в диалоговом окне.
  5. В поле Тип TLS/SSL выберите ssl SNI или SSL на основе IP.

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

  7. Выберите Добавить.

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

    Снимок экрана: личный домен, защищенный привязкой сертификата.

Примечание

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

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

Этот шаг необходим только для SSL на основе IP-адресов. Для привязки SSL SNI перейдите к разделу Проверка HTTPS для личного домена.

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

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

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

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

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

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

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

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

Примечание

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

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

Часто задаваемые вопросы

Разделы справки убедиться, что IP-адрес приложения не изменяется при внесении изменений в привязку сертификата?

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

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

Можно ли отключить принудительное перенаправление с HTTP на HTTPS?

По умолчанию Служба приложений принудительно перенаправляет http-запросы на HTTPS. Сведения об отключении этого поведения см. в статье Настройка общих параметров.

Как изменить минимальные версии TLS для приложения?

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

Разделы справки обрабатывать завершение TLS в Служба приложений?

В Службе приложений терминирование 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.
$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

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