共用方式為


在 Azure App Service 中啟用自訂網域的 HTTPS

本文說明如何藉由建立憑證系結,為 Azure App Service 應用程式函式應用程式中自定義網域提供安全性。 完成後,您可以在自訂網域名稱系統 (DNS) 名稱的 https:// 端點存取您的 App Service 應用程式。 例如 https://www.contoso.com

顯示具有自定義 TLS/SSL 憑證之 Web 應用程式的螢幕快照。

必要條件

新增繫結

Azure 入口網站

  1. 在左窗格中,選取 [App Services><應用程式名稱>]。

  2. 在應用程式的左窗格中,選取 [自定義網域]。

  3. 在自訂網域旁,選取 [新增繫結]

    顯示如何開啟 [新增 TLS/SSL 系結] 對話框的螢幕快照。

  4. 如果應用程式已經有所選自訂網域的憑證,則可以在 [憑證] 中選取該憑證。 如果沒有,您必須使用 來源 中的其中一個選項來新增憑證:

    • 建立 App Service 受控憑證:讓 App Service 為您選取的網域建立受控憑證。 此選項是最簡單的。 如需詳細資訊,請參閱建立免費的受控憑證
    • 匯入 App Service 憑證:在 App Service 憑證中,選取您為所選網域購買的 App Service 憑證
    • 上傳憑證 (.pfx):遵循 上傳私人憑證的 工作流程,從本機計算機上傳個人資訊交換檔案 (PFX) 憑證,並指定憑證密碼。
    • 從 Key Vault 匯入:選擇 [選取金鑰保存庫憑證 ],然後選取對話框中的憑證。
  5. [TLS/SSL 類型] 中,選取 [SNI SSL ] 或 [ IP 型 SSL]:

    • SNI SSL:您可以新增多個伺服器名稱指示 (SNI) 安全套接字層 (SSL) 系結。 此選項允許多個傳輸層安全性 (TLS)/SSL 憑證,協助保護相同IP位址上的多個網域。 現今大部分的瀏覽器 (包括 Microsoft Edge、Chrome、Firefox 和 Opera) 都支援 SNI。 (如需詳細資訊,請參閱伺服器名稱指示。)
    • 以IP為基礎的 SSL:您只能新增一個IP SSL 系結。 此選項只允許一個 TLS/SSL 憑證協助保護專用的公用 IP 位址。 設定繫結之後,請依照為 IP 型 SSL 重新對應記錄中的步驟執行。 只有標準層或更高層級才支援以IP為基礎的SSL。
  6. 當您新增憑證時,請選取 [驗證 ] 來驗證新的憑證。

  7. 選取 [新增]。

    作業完成之後,自定義網域的 TLS/SSL 狀態會變更為 [安全]。

    顯示由憑證系結保護之自定義網域的螢幕快照。

    自定義網域中的安全狀態表示憑證提供安全性。 App Service 不會檢查憑證是否已自我簽署或過期,這也可能導致瀏覽器顯示錯誤或警告。

為 IP 型 SSL 重新對應記錄

只有 IP 型 SSL 才需要此步驟。 針對 SNI 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. 刪除舊的憑證。

我可以將從 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 命令列介面 (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