この記事では、証明書バインディングを作成して、Azure App Service アプリまたは関数アプリのカスタム ドメインのセキュリティを提供する方法について説明します。 完了したら、カスタム ドメイン ネーム システム (DNS) 名の https://
エンドポイントで App Service アプリにアクセスできます。 たとえば https://www.contoso.com
です。
前提条件
- App Service アプリを 、サポートされている価格レベル (Basic、Standard、Premium) のいずれかにスケールアップします。
- ドメイン名をアプリにマップするか、Azure で購入して構成します。
バインディングを追加する
Azure ポータルで次の操作を行います。
左側のウィンドウで、App Services><app-name> を選択します。
アプリの左側のウィンドウで、[ カスタム ドメイン] を選択します。
カスタム ドメインの横にある [バインディングの追加] を選択します。
選択したカスタム ドメインの証明書がアプリに既にある場合は、[証明書] でそれを選択できます。 そうでない場合は、 ソースの選択のいずれかを使用して証明書を追加する必要があります。
- App Service マネージド証明書の作成: App Service で選択したドメインのマネージド証明書を作成できるようにします。 このオプションは、最も簡単です。 詳細については、「無料のマネージド証明書を作成する」を参照してください。
- App Service 証明書のインポート: App Service 証明書で、選択したドメイン用に購入した App Service 証明書 を選択します。
- 証明書のアップロード (.pfx):「プライベート証明書をアップロードする」のワークフローに従って、ローカル コンピューターから Personal Information Exchange ファイル (PFX) 証明書をアップロードし、証明書パスワードを指定します。
- Key Vault からのインポート: [ キー コンテナー証明書の選択 ] を選択し、ダイアログで証明書を選択します。
TLS/SSL の種類で、SNI SSL または IP ベースの SSL のいずれかを選択します。
- SNI SSL: 複数のサーバー名表示 (SNI) Secure Sockets Layer (SSL) バインドを追加できます。 このオプションを使用すると、複数のトランスポート層セキュリティ (TLS)/SSL 証明書を使用して、同じ IP アドレス上の複数のドメインをセキュリティで保護できます。 最新のブラウザー (Microsoft Edge、Chrome、Firefox、Opera を含む) のほとんどが SNI をサポートしています。 (詳細については、「Server Name Indication」を参照してください。)
- IP ベースの SSL: 追加できる IP SSL バインディングは 1 つだけです。 このオプションは、TLS/SSL 証明書を 1 つだけ使用して、専用のパブリック IP アドレスを保護するのに役立ちます。 バインディングを構成した後は、「IP ベースの SSL のレコードを再マップする」の手順に従います。 IP ベースの SSL は、Standard レベル以上でのみサポートされます。
新しい証明書を追加するときに、[ 検証 ] を選択して新しい証明書を検証します。
[追加] を選択します。
操作が完了すると、カスタム ドメインの TLS/SSL 状態が セキュリティで保護された状態に変更されます。
カスタム ドメインのセキュリティで保護された状態は、証明書がセキュリティを提供することを意味します。 App Service では、証明書が自己署名されているか期限切れであるかは確認されません。これにより、ブラウザーにエラーまたは警告が表示される可能性もあります。
IP ベースの SSL のレコードを再マップする
この手順は、IP ベースの SSL に対してのみ必要です。 SNI SSL バインディングの場合は、「HTTPS をテストする」に進みます。
次の 2 つの変更を行う必要があります。
既定では、アプリは、共有のパブリック IP アドレスを使用します。 IP SSL で証明書をバインドすると、アプリ用の新規の専用 IP アドレスが App Service によって作成されます。 アプリに A レコードをマップした場合は、この新規の専用 IP アドレスでドメイン レジストリを更新します。
アプリの [カスタム ドメイン] ページが、新規の専用 IP アドレスで更新されます。 この IP アドレスをコピーし、 A レコードを この新しい IP アドレスに再マップします。
<app-name>.azurewebsites.net
への SNI SSL バインディングがある場合は、 を指すようにsni.<app-name>.azurewebsites.net
します。 (sni
プレフィックスを追加します。)
HTTPS のテスト
さまざまなブラウザーで https://<your.custom.___domain>
にアクセスして、アプリが表示されることを確認します。
プロトコルは、アプリケーション コードから x-appservice-proto
ヘッダーを介して調査することができます。 ヘッダーの値は http
または https
です。
アプリで証明書検証エラーが返された場合は、自己署名証明書を使用している可能性があります。 そうでない場合は、証明書を .pfx ファイルにエクスポートするときに中間証明書を除外した可能性があります。
よく寄せられる質問
証明書のバインドを変更してもアプリの IP アドレスが変更されないようにするにはどうすればよいですか?
バインディングを削除すると、着信 IP アドレスが変化する場合があります。そのバインディングが IP SSL であっても同様です。 この動作は、IP SSL バインディングに既に存在する証明書を更新する場合に特に重要です。 アプリの IP アドレスが変更されないようにするには、次の手順に従います。
- 新しい証明書をアップロードします。
- 古い証明書を削除せずに、新しい証明書を目的のカスタム ドメインにバインドします。 これは、古い証明書を削除する代わりに、バインディングを置き換える操作となります。
- 古い証明書を削除します。
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(Azure コマンドライン インターフェイス)
カスタム 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