Azure App Service で TLS/SSL バインドを使用してカスタム DNS 名をセキュリティで保護する

この記事では、証明書バインドを作成することで App Service アプリまたは関数アプリカスタム ドメインをセキュリティで保護する方法について説明します。 完了したら、カスタム DNS 名 (https://www.contoso.com など) の https:// エンドポイントで App Service アプリにアクセスできます。

Web app with custom TLS/SSL certificate

前提条件

1. バインディングを追加する

Azure ポータルで次の操作を行います。

  1. 左側のメニューから、[App Services]><app-name> を選択します。

  2. アプリの左側のナビゲーションから、[カスタム ドメイン] を選択します

  3. カスタム ドメインの横にある [バインディングの追加] を選択します

    A screenshot showing how to launch the Add TLS/SSL Binding dialog.

  4. 選択したカスタム ドメインの証明書がアプリに既にある場合は、[証明書] でそれを選択できます。 そうでない場合は、[ソース] の選択肢のいずれかを使用して証明書を追加する必要があります。

    • App Service マネージド証明書の作成 - App Service で、選択したドメインのマネージド証明書を作成します。 このオプションは最もシンプルです。 詳細については、「無料のマネージド証明書を作成する」を参照してください。
    • App Service 証明書のインポート - [App Service 証明書] で、選択したドメイン用に購入した App Service 証明書を選択してください。
    • 証明書のアップロード (.pfx) - 「プライベート証明書のアップロード」のワークフローに従って、ローカル コンピューターから PFX 証明書をアップロードし、証明書のパスワードを指定します。
    • Import from Key Vault (Key Vault からのインポート) - [Select key vault certificate] (キー コンテナー証明書の選択) を選択し、ダイアログで証明書を選択します。
  5. [TLS/SSL の種類] で、[SNI SSL][IP ベースの SSL] のどちらかを選択します。

    • SNI SSL: 複数の SNI SSL バインディングを追加できます。 このオプションでは、複数の TLS/SSL 証明書を使用して、同一の IP アドレス上の複数のドメインを保護できます。 最新のブラウザーのほとんど (Inernet Explorer、Chrome、Firefox、Opera など) が SNI をサポートしています (詳細については、「Server Name Indication」を参照してください)。
      • IP ベースの SSL: IP SSL バインディングを 1 つだけ追加できます。 このオプションでは、TLS/SSL 証明書を 1 つだけ使用して、専用のパブリック IP アドレスを保護します。 バインディングを構成した後は、「2. IP ベースの SSL のレコードの再マッピング」の手順に従います。
        IP SSL は、Basic レベル以上でのみサポートされます。
  6. 新しい証明書を追加する場合は、[検証] を選択して新しい証明書を検証します。

  7. [追加] を選択します。

    操作が完了すると、カスタム ドメインの TLS/SSL 状態がセキュリティで保護された状態に変わります。

    A screenshot showing the custom domain secured by a certificate binding.

Note

[カスタム ドメイン] での [セキュリティ保護] 状態とは、それが証明書を使用してセキュリティで保護されているが、App Service はその証明書が自己署名されたものか有効期限が切れているかをチェックしないことを意味します。たとえば、それによって、ブラウザーにエラーや警告が表示されることもあります。

2. IP ベースの SSL のレコードの再マッピング

この手順は、IP ベースの SSL に対してのみ必要です。 SNI SSL バインディングの場合は、カスタム ドメインの HTTPS のテストに関するページに進みます。

行うべき変更は 2 つ考えられます。

  • 既定では、アプリは、共有のパブリック IP アドレスを使用します。 IP SSL で証明書をバインドすると、アプリ用の新規の専用 IP アドレスが App Service によって作成されます。 アプリに A レコードをマップした場合は、この新規の専用 IP アドレスでドメイン レジストリを更新します。

    アプリの [カスタム ドメイン] ページが、新規の専用 IP アドレスで更新されます。 この IP アドレスをコピーして、この新しい IP アドレスに A レコードを再マップします。

  • <app-name>.azurewebsites.net への SNI SSL バインディングがある場合は、sni.<app-name>.azurewebsites.net を指すように CNAME マッピングを再マップします (sni プレフィックスを追加)。

3. HTTPS をテストする

さまざまなブラウザーで https://<your.custom.domain> にアクセスし、アプリの要求を処理できることを確認します。

Screenshot showing an example of browsing to your custom domain with the contoso.com URL highlighted.

プロトコルは、アプリケーション コードから "x-appservice-proto" ヘッダーを介して調査することができます。 ヘッダーの値は http または https です。

注意

アプリで証明書検証エラーが返された場合は、自己署名証明書を使用している可能性があります。

そうでない場合は、証明書を PFX ファイルにエクスポートするときに中間証明書を含めなかった可能性があります。

よく寄せられる質問

証明書のバインドを変更してもアプリの IP アドレスが変更されないようにするにはどうすればよいですか?

バインディングを削除すると、着信 IP アドレスが変化する場合があります。そのバインディングが IP SSL であっても同様です。 IP SSL バインディングに既に存在する証明書を更新するときには、このことが特に重要となります。 アプリの IP アドレスに変更が生じないようにするには、次の手順に従います。

  1. 新しい証明書をアップロードします。
  2. 古い証明書を削除せずに、新しい証明書を目的のカスタム ドメインにバインドします。 これは、古い証明書を削除する代わりに、バインディングを置き換える操作となります。
  3. 古い証明書を削除します。

HTTP から HTTPS への強制リダイレクトを無効にできますか?

既定では、App Service は HTTP 要求から HTTPS へのリダイレクトを強制します。 この動作を無効にするには、「全般設定を構成する」を参照してください。

アプリの最小 TLS バージョンを変更するにはどうすればよいですか?

アプリでは既定で TLS 1.2 が有効です。これは、PCI DSS などの業界標準で推奨されている TLS レベルです。 異なる TLS バージョンを適用するには、「全般設定を構成する」を参照してください。

App Service で TLS 終端を処理するにはどうすればよいですか?

App Service では、TLS 終了がネットワーク ロード バランサーで発生するため、すべての HTTPS 要求は暗号化されていない HTTP 要求としてアプリに到達します。 ユーザー要求が暗号化されているかどうかをアプリ ロジックが確認する必要がある場合は、X-Forwarded-Proto ヘッダーを調べます。

Linux Node.js 構成ガイドなどの言語固有の構成ガイドでは、アプリケーション コード内の HTTPS セッションを検出する方法について説明しています。

スクリプトで自動化する

Azure CLI

カスタム TLS/SSL 証明書を Web アプリにバインドする

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

その他のリソース