在 Azure App Service 中使用 TLS/SSL 繫結保護自訂 DNS 名稱

本文說明如何藉由建立憑證繫結,在您的 App Service 應用程式函式應用程式中保護自訂網域。 完成此作業後,您將可在自訂 DNS 名稱的 https:// 端點存取您的 App Service 應用程式 (例如 https://www.contoso.com)。

Web 應用程式與自訂 TLS/SSL 憑證

要使用憑證保護自訂網域,必須執行兩個步驟:

在本教學課程中,您會了解如何:

  • 升級應用程式的定價層
  • 使用憑證保護自訂網域
  • 強制使用 HTTPS
  • 強制使用 TLS 1.1/1.2
  • 使用指令碼將 TLS 管理自動化

Prerequisites

若要遵循本操作說明指南:

注意

若要新增私人憑證,最簡單的方式是建立免費的 App Service 受控憑證

準備您的 Web 應用程式

若要為您的 App Service 應用程式建立自訂 TLS/SSL 繫結或啟用用戶端憑證,您的 App Service 方案 必須使用基本標準進階隔離層。 若要確定 Web 應用程式在支援的定價層,請遵循下列步驟:

移至您的 Web 應用程式

  1. Azure 入口網站的搜尋方塊中,尋找並選取 [App Service]。

    Azure 入口網站、搜尋方塊及已選取 [App Service] 的螢幕擷取畫面。

  2. 在 [應用程式服務] 頁面上,選取您 Web 應用程式的名稱。

    Azure 入口網站中 [應用程式服務] 頁面的螢幕擷取畫面,其中顯示所有執行中 Web 應用程式的清單並醒目提示清單中的第一個應用程式。

    您現在位於 Web 應用程式的管理頁面上。

檢查定價層

  1. 在 Web 應用程式左側功能表的 [設定] 區段底下,選取 [擴大 (App Service 方案)]。

    Web 應用程式功能表 [設定] 區段並已選取 [擴大 (App Service 方案)] 的螢幕擷取畫面。

  2. 請確定您的 Web 應用程式不在 F1D1 層中,這些階層不支援自訂 TLS/SSL。

    系統會以深藍色方塊醒目顯示 Web 應用程式目前的層。

    Web 應用程式定價層資訊的螢幕擷取畫面。

  3. 如果您需要擴大,請遵循下一節中的步驟來進行。 否則,請關閉 [擴大] 頁面,並略過擴大 App Service 方案一節。

擴大您的 App Service 方案

  1. 選取任何非免費層,例如 B1B2B3生產類別中的任何一層。 如需更多選項,請選取 [查看其他選項]。

  2. 完成時,請選取 [套用]。

    已選取定價層和 [套用] 的螢幕擷取畫面。

    出現下列訊息時,表示調整作業已完成。

    擴大作業完成訊息的螢幕擷取畫面。

保護自訂網域

請執行下列步驟:

Azure 入口網站中,從左側功能表選取 [應用程式服務]><app-name>>

從應用程式的左側導覽中,透過下列方式啟動 [TLS/SSL 繫結] 對話方塊:

  • 選取 [自訂網域] >[新增繫結]
  • 選取 [TLS/SSL 設定] >[新增 TLS/SSL 繫結]

新增繫結至網域

在 [自訂網域] 中,選取要新增繫結的自訂網域。

如果您的應用程式已經有所選自訂網域的憑證,請移至 直接建立系結。 否則,請繼續進行。

新增自訂網域的憑證

如果您的應用程式沒有所選自訂網域的憑證,則您有兩個選項:

注意

您也可以建立免費憑證匯入 Key Vault 憑證,但您必須個別加以執行,然後返回 [TLS/SSL Binding] \(TLS/SSL 繫結\) 對話方塊。

建立繫結

利用下表在 [TLS/SSL 繫結] 對話方塊中設定 TLS 繫結,然後按一下 [新增繫結] 。

設定 描述
自訂網域 要新增 TLS/SSL 繫結的網域名稱。
私人憑證指紋 要繫結的憑證。
TLS/SSL 類型
  • SNI SSL - 可新增多個 SNI SSL 繫結。 此選項可允許多個 TLS/SSL 憑證保護同一個 IP 位址上的多個網域。 現今大部分的瀏覽器 (包括 Internet Explorer、Chrome、Firefox 和 Opera) 都支援 SNI (如需詳細資訊,請參閱伺服器名稱指示)。
  • IP SSL - 只能新增一個 IP SSL 繫結。 此選項只允許一個 TLS/SSL 憑證保護專用的公用 IP 位址。 設定繫結之後,請依照為 IP SSL 重新對應記錄中的步驟執行。
    只有標準層或更高的層級才支援 IP SSL。

作業完成後,自訂網域的 TLS/SSL 狀態會變更為安全

TLS/SSL 繫結成功

注意

自訂網域中的安全狀態表示網域已透過憑證來保護,但是 App Service 不會檢查憑證是否已自我簽署或已過期等等,而這些狀況會導致瀏覽器顯示錯誤或警告。

為 IP SSL 重新對應記錄

如果您未在應用程式中使用 IP SSL,請跳至測試自訂網域的 HTTPS

您可能需要進行兩個變更:

  • 根據預設,您的應用程式會使用共用的公用 IP 位址。 當您將憑證與 IP SSL 繫結時,App Service 會為您的應用程式建立新的專用 IP 位址。 如果您已將 A 記錄對應至應用程式,請使用這個新的專用 IP 位址來更新網域登錄。

    應用程式的 [自訂網域] 頁面即會使用新的專用 IP 位址加以更新。 複製此 IP 位址,然後將 A 記錄重新對應到這個新的 IP 位址。

  • 如果您有繫結至 <app-name>.azurewebsites.net 的 SNI SSL,請重新對應任何 CNAME 對應,以改為指向 sni.<app-name>.azurewebsites.net (新增 sni 前置詞)。

測試 HTTPS

在各種瀏覽器中瀏覽至 https://<your.custom.domain>,以確認它是否為您的應用程式提供服務。

顯示瀏覽至自訂網域 (已醒目提示 contoso.com URL) 範例的螢幕擷取畫面。

您的應用程式程式碼可以透過 "x-appservice-proto" 標頭來檢查通訊協定。 標頭的值會是 httphttps

注意

如果您的應用程式出現憑證驗證錯誤,您可能使用了自我簽署憑證。

如果不是,在您將憑證匯出為 PFX 檔案時,可能遺漏了中繼憑證。

防止 IP 變更

當您刪除繫結時,您可以變更輸入 IP 位址,即使該繫結是 IP SSL 亦然。 當您更新已在 IP SSL 繫結中的憑證時,這一點尤為重要。 若要避免變更應用程式的 IP 位址,請依序執行下列步驟:

  1. 上傳新憑證。
  2. 將新的憑證繫結至您要的自訂網域,而不刪除舊憑證。 此動作會取代繫結,而不會移除舊的繫結。
  3. 刪除舊憑證。

強制使用 HTTPS

在應用程式頁面的左側導覽中,選取 [TLS/SSL settings] \(TLS/SSL 設定\)。 然後,在 [僅限 HTTPS] 中選取 [開啟] 。

如果選取 [僅限 HTTPS]、[關閉],表示任何人仍可以使用 HTTP 存取您的應用程式。 您可以藉由選取 [開啟]。將所有 HTTP 要求重新都導向至 HTTPS 連接埠。

強制使用 HTTPS

當作業完成時,瀏覽至指向您的應用程式的任何 HTTP URL。 例如:

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

強制使用 TLS 版本

根據預設,您的應用程式會允許 TLS 1.2,此為業界標準 (例如 PCI DSS) 建議的 TLS 層級。 若要強制使用不同的 TLS 版本,請遵循下列步驟:

在應用程式頁面的左側導覽中,選取 [TLS/SSL settings] \(TLS/SSL 設定\)。 然後,在 [TLS 版本] 中,選取您想要的最低 TLS 版本。 此設定只會控制內送的呼叫。

強制使用 TLS 1.1 或 1.2

當作業完成時,您的應用程式會拒絕與較低 TLS 版本的所有連線。

處理 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

其他資源