分享方式:


在 App Service 中使用 TLS/SSL 繫結為自訂 DNS 名稱提供安全性

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

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

必要條件

新增繫結

Azure 入口網站

  1. 從左側功能表選取 [應用程式服務]><app-name>

  2. 在應用程式頁面的左側導覽中,選取 [自訂網域]

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

    顯示如何啟動 [新增 TLS/SSL 繫結] 對話方塊的螢幕擷取畫面。

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

    • 建立 App Service 受控憑證:讓 App Service 為所選網域建立受控憑證。 此選項是最簡單的。 如需詳細資訊,請參閱建立免費的受控憑證
    • 匯入 App Service 憑證:在 App Service 憑證中,選取您為所選網域購買的 App Service 憑證
    • 上傳憑證 (.pfx):請遵循上傳私人憑證的工作流程,以從本機機器上傳 PFX 憑證並指定憑證密碼。
    • 從金鑰保存庫匯入:選取 [選取金鑰保存庫憑證],然後在對話方塊中選取該憑證。
  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 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