在 Azure 雲端服務 中啟用 HTTPS 通訊(外延支援)
使用超文本傳輸通訊協定安全 (HTTPS) 通訊協定來完成與 Microsoft Azure 雲端服務 通訊(擴充支援)。 本文討論如何啟用 雲端服務 的 HTTPS 通訊(外延支援)。
必要條件
專案部署的一般步驟
將 雲端服務(外延支援)專案部署到 Azure 的一般步驟如下:
準備您的憑證。
設定您的專案。
將專案檔封裝到雲端服務的服務定義 (.csdef)、服務組態 (.cscfg) 和服務套件 (.cspkg) 檔案中。
視需要變更 雲端服務 (外延支援) 資源的組態。 例如,您可以進行下列任何修改:
- 更新套件 URL。
- 設定 URL 設定。
- 更新作業系統秘密設定。
將新專案部署並更新至 Azure。
注意
專案可以透過數種不同的方法進行部署,例如使用下列工具:
不論部署方法為何,一般部署步驟都相同。
所有部署方法都需要上述前兩個步驟。 這些步驟會在程式 代碼變更 一節中討論。 其餘步驟也很重要,但它們不一定需要手動使用者介入。 例如,步驟可能會由 Visual Studio 之類的工具自動完成。 這些步驟的最後三個步驟會在組 態變更 一節中討論。
程式碼變更
若要進行程式代碼變更以準備憑證並設定專案,請執行下列步驟:
請遵循指示, 透過步驟 6 將憑證上傳至金鑰保存庫 。
記下憑證的指紋(40 位數的十六進位字串)。
在 專案的服務組態 (.cscfg) 檔案 中,將憑證指紋新增至您要在其中使用憑證的角色。 例如,如果您想要使用憑證作為 SSL 憑證來與 WebRole 通訊,您可以新增類似下列代碼段 WebRole1
的 XML 程式代碼作為根 ServiceConfiguration
元素的第一個子系:
<Role name="WebRole1">
<Instances count="1" />
<Certificates>
<Certificate
name="Certificate1"
thumbprint="0123456789ABCDEF0123456789ABCDEF01234567"
thumbprintAlgorithm="sha1"
/>
</Certificates>
</Role>
您可以自定義憑證的名稱,但必須符合服務定義 (.csdef) 檔案中使用的憑證名稱。
在 服務定義 (.csdef) 檔案中,新增下列元素。
父 XPath |
要加入的專案 |
要使用的屬性 |
/ServiceDefinition/WebRole/Sites/Site/Bindings |
Binding |
name、 endpointName |
/ServiceDefinition/WebRole/Endpoints |
InputEndpoint |
name, protocol, port, certificate |
/ServiceDefinition/WebRole |
Certificates/Certificate |
name, storeLocation, storeName, permissionLevel |
元素 Certificates
必須直接加入結尾 Endpoints
標記之後。 它不包含任何屬性。 它只包含子 Certificate
專案。
例如,您的服務定義檔案可能類似下列 XML 程式代碼:
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="CSESOneWebRoleHTTPS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
<WebRole name="WebRole1" vmsize="Standard_D1_v2">
<Sites>
<Site name="Web">
<Bindings>
<Binding name="Endpoint1" endpointName="Endpoint1" />
<Binding name="HttpsIn" endpointName="HttpsIn" />
</Bindings>
</Site>
</Sites>
<Endpoints>
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="Certificate1" />
</Endpoints>
<Certificates>
<Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" />
</Certificates>
</WebRole>
</ServiceDefinition>
在此範例中,服務定義檔案會修改為在埠 443 上系結 HTTPS 通訊協定的 輸入端點 HttpsIn
。 它會針對名稱為 的存放區使用 Certificate1
憑證, My
且其位置 LocalMachine
只針對有限或提高的許可權等級。 和 Certificate
元素中的InputEndpoint
憑證名稱彼此相符。 它們也會比對上一個步驟中服務組態 (.cscfg) 檔案中使用的憑證名稱。
設定變更
變更雲端服務設定的指示會根據您的雲端服務部署方式而有所不同。 這些指示會顯示在下列索引標籤上。 每個索引標籤都代表不同的部署方法。
繼續進行之前,請參閱使用 Azure 入口網站 部署 Azure 雲端服務(外延支援)。 然後,請遵循下列步驟,透過 Azure 入口網站 進行正確的組態變更:
移至標題 為使用ARM範本手動從傳統雲端服務移轉至雲端服務擴充支援的部落格文章,並遵循步驟 7 到 9。 這些指示說明如何執行下列步驟:
在 Azure 入口網站 中,返回雲端服務的 [概觀] 頁面,然後選取 [更新]。
在 [ 更新雲端服務] 頁面上,於 [基本] 索引 卷標上進行下列變更:
在 [ 套件/組態/服務定義位置] 字段中,選取 [從 Blob]。
在 [ 上傳套件 #.cspkg, .zip] 字段中,遵循下列步驟:
- 選取 [ 瀏覽] 連結。
- 選取您上傳檔案的記憶體帳戶和容器。
- 在容器頁面中,選取對應的檔案(在此案例中為 <project-name.cspkg>),然後選取 [選取] 按鈕。
針對 [ 上傳組態 #.cscfg] 字段 (和 ServiceConfiguration.Cloud.cscfg 檔案),重複上一個步驟中所述的子程式。
針對 [ 上傳服務定義 (.csdef) ] 字段 (和 ServiceDefinition.csdef 檔案),請再次重複子程式。
選取 [設定] 索引標籤。
在 [ 金鑰保存庫 ] 欄位中,選取您上傳憑證的密鑰保存庫(稍早在 [程式代碼變更 ] 區段中)。 在選取的金鑰保存庫中找到憑證之後,列出的憑證會顯示 [找到狀態]。
若要部署新設定的專案,請選取 [ 更新] 按鈕。
繼續進行之前,請參閱 使用 Azure PowerShell 部署雲端服務(外延支援)。 然後,請遵循下列步驟,透過PowerShell腳本進行設定變更:
移至標題 為使用ARM範本手動從傳統雲端服務移轉至雲端服務擴充支援的部落格文章,並遵循步驟 7 到 9。 這些指示說明如何執行下列步驟:
執行 Connect-AzAccount Cmdlet 來登入 Azure。
在下列 PowerShell 腳本中,以每個變數的實際值取代腳本開頭的佔位符,然後執行腳本來更新雲端服務:
# Enter values for placeholders in the following variables.
$vaultName = "<key-vault-resource-name>"
$resourceGroupKeyVault = "<resource-group-name-where-key-vault-is-deployed>"
$certificateName = "<name-of-certificate-saved-in-key-vault>"
$cloudService = @{
Name = "<name-of-cloud-service>"
ResourceGroupName = "<resource-group-name-where-cloud-service-is-deployed>"
SubscriptionId = "<subscription-guid>"
}
$cscfgFilePath = "<local-path-to-your-service-configuration-file-cscfg>"
$cspkgUrl = "<sas-token-url-of-the-service-package-file-cspkg>"
# Code execution
$keyVault = Get-AzKeyVault -VaultName $vaultName -ResourceGroupName $resourceGroupKeyVault
$certificate = Get-AzKeyVaultCertificate -VaultName $vaultName -Name $certificateName
$vaultSecretGroupObject = @{
CertificateUrl = $certificate.SecretId
Id = $keyVault.ResourceId
}
$secretGroup = New-AzCloudServiceVaultSecretGroupObject @vaultSecretGroupObject
$osProfile = @{secret = @($secretGroup)}
$cses = Get-AzCloudService @cloudService
$cses.Configuration = Get-Content $cscfgFilePath | Out-String
$cses.PackageUrl = $cspkgUrl
$cses.OSProfile = $osProfile
$cses | Update-AzCloudService
繼續進行之前,請參閱 使用ARM範本部署雲端服務(外延支援)。 然後,請遵循下列步驟來設定ARM範本:
移至標題為 使用ARM範本手動從傳統雲端服務移轉至雲端服務擴充支援的部落格文章,並遵循步驟 7 到 10。 這些指示說明如何執行下列步驟:
封裝專案。
將產生的服務套件 (<project-name.cspkg>) 和雲端服務組態 (ServiceConfiguration.Cloud.cscfg) 檔案上傳至雲端服務的記憶體帳戶容器。
為每個上傳的檔案產生共用存取簽章 (SAS) URL。
從 Azure 入口網站 中的金鑰儲存庫憑證頁面取得下列值:
- 金鑰保存庫憑證 URL
- 訂用帳戶識別碼
- 部署金鑰保存庫的資源群組名稱
- 金鑰保存庫的服務名稱
在雲端服務的原始 ARM 範本中,尋找 osProfile
屬性。 如果原始雲端服務專案只支援 HTTP 通訊,則 osProfile
屬性是空的 ("osProfile": {}
)。 若要讓雲端服務從正確的密鑰保存庫擷取正確的憑證,請指定您要在 ARM 範本中使用的金鑰保存庫。 您可以使用 參數來表示此值。 或者,您可以將值硬式編碼到 ARM 範本,如下列範例所示:
"osProfile": {
"secrets": [
{
"sourceVault": {
"id": "/subscriptions/88889999-aaaa-bbbb-cccc-ddddeeeeffff/resourceGroups/cstocses/providers/Microsoft.KeyVault/vaults/cstocses"
},
"vaultCertificates": [
{
"certificateUrl": "https://cstocses.vault.azure.net/secrets/csescert/0123456789abcdef0123456789abcdef"
}
]
}
]
}
在 ARM 範本的 JSON 文字中,id
參數中的sourceVault
值是 Azure 入口網站 中 金鑰保存庫 頁面 URL 的一部分。 此值 certificateUrl
是您稍早找到的金鑰保存庫憑證 URL。 下表顯示這些值的文字格式。
參數 |
格式 |
來源保存庫標識碼 |
/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/Microsoft.KeyVault/vaults/<key-vault-name> |
金鑰保存庫憑證 URL |
https://<key-vault-name>.vault.azure.net/secrets/<certificate-name>/<certificate-secret> |
部署更新的 ARM 範本,其中包含新的參數,例如套件 SAS 令牌、設定 SAS 令牌等等。 若要查看如何宣告和指定這些參數,您可以檢閱 範例 ARM 範本檔案 和 範例 ARM 範數檔案。 然後,等候部署完成。
注意
如果您收到錯誤訊息,指出正在使用公用IP位址,請從服務組態 (.cscfg) 檔案和ARM樣本參數檔案中移除公用IP位址。 請勿從 ARM 範本檔案本身移除公用 IP 位址宣告。
繼續進行之前,請參閱使用 Azure SDK 部署 雲端服務(外延支援)。
注意
本節包含從官方 SDK 範例程式代碼重寫的程式代碼,您可以在 Azure 雲端服務 的 GitHub 範例代碼頁中找到此程式碼(外延支援)。
本節說明如何使用 Azure SDK 和 C# 進行正確的組態變更。 若要成功使用 SDK 來部署雲端服務專案並修改相關組態,您應該在 entra 識別碼Microsoft註冊應用程式。 若要進行註冊,請參閱 使用入口網站建立可存取資源的 Microsoft Entra 應用程式和服務主體一文。 下表概述要採取的特定步驟,以及該文章中要閱讀的對應子區段。
請依照下列步驟進行正確的組態變更:
移至標題為 使用ARM範本 手動從傳統雲端服務移轉至雲端服務擴充支援的部落格文章,並遵循步驟 7 到 10。 這些指示說明如何執行下列步驟:
封裝專案。
將產生的服務套件 (<project-name.cspkg>) 檔案上傳至雲端服務的記憶體帳戶容器。
注意
儘管指示中說明的內容,但您不需要上傳雲端服務組態 (ServiceConfiguration.Cloud.cscfg) 檔案。 只有服務套件檔案必須在這裡上傳。
為上傳的服務套件檔案產生共用存取簽章 (SAS) URL。
從 Azure 入口網站 中的金鑰儲存庫憑證頁面取得下列值:
- 金鑰保存庫憑證 URL
- 訂用帳戶識別碼
- 部署金鑰保存庫的資源群組名稱
- 金鑰保存庫的服務名稱
下載範例專案(壓縮的封存盤案),並解壓縮其內容。
在 文本編輯器中開啟 SDKSample\CreateCloudService\CreateCloudService\LoginHelper.cs 檔案。 在方法中InitializeServiceClient
,使用租使用者標識碼、應用程式標識碼和應用程式密碼的值,分別覆寫、 clientId
和 clientCredentials
字串變數的值tenantId
。 這些值是您註冊應用程式時複製的值。
在 文本編輯器中開啟 SDKSample\CreateCloudService\CreateCloudService\Program.cs 檔案。 在方法中 Main
,覆寫方法開頭所宣告之變數的一些初始化值。 下表顯示變數名稱和您必須用於它們的值。
變數名稱 |
新值 |
m_subId |
包含雲端服務的訂用帳戶標識碼 |
csrgName |
包含雲端服務的資源群組名稱 |
csName |
雲端服務資源名稱 |
kvrgName |
包含金鑰保存庫資源的資源群組名稱 |
kvName |
金鑰保存庫資源名稱 |
kvsubid |
包含金鑰儲存庫的訂用帳戶識別碼(這可能與雲端服務訂用帳戶識別碼不同) |
secretidentifier |
金鑰保存庫憑證 URL |
filename |
服務組態檔的本機路徑 (ServiceConfiguration.Cloud.cscfg) |
packageurl |
服務套件檔案的SAS URL(project-name.cspkg>)< |
在 Visual Studio 方案總管 窗格中,以滑鼠右鍵按兩下項目節點,然後選取 [管理 NuGet 套件]。 在 [ 瀏覽] 索引標籤上,搜尋、選取並安裝下列套件:
Microsoft.Azure.Management.ResourceManager
Microsoft.Azure.Management.Compute
Microsoft.Azure.Management.Storage
Azure.Identity
Microsoft.Rest.ClientRuntime.Azure.Authentication
執行專案,然後等候訊息出現在 [ 輸出 ] 窗格中。 如果窗格顯示「結束代碼 0」,更新和部署應該會順利運作。 如果顯示「結束代碼 1」,您可能必須檢查是否有錯誤訊息來檢閱任何問題。
在繼續之前,請參閱在Visual Studio中建立和部署至 雲端服務(外延支援)。
在 Visual Studio 中,您必須進行兩個設定變更。 您已設定服務組態,讓本機內容與雲端內容一致,然後指定密鑰保存庫所在的位置。
針對服務組態,複製雲端內容的內容( ServiceConfiguration.Cloud.cscfg 檔案),並將其貼到本機內容中( ServiceConfiguration.Local.cscfg 檔案)。 您有不同的組態,還是仍然需要本機組態檔以供其他用途使用? 如果任一條件為 true,請 certificate
保留現有本機內容中的專案。
在 Visual Studio 方案總管 窗格中,以滑鼠右鍵按鍵按鍵節點,然後選取 [發佈]。 繼續執行 [發佈 Azure 應用程式 精靈],直到您到達 [設定] 索引標籤為止。在該索引標籤上,將 [金鑰保存庫] 字段設定為儲存金鑰保存庫的位置。 最後,選取 [ 發佈] 按鈕,然後等待部署完成。
進行設定變更之後,客戶將能夠使用 HTTPS 通訊協定與您的雲端服務網站通訊。 如果您的憑證已自我簽署,瀏覽器可能會報告憑證不安全,但瀏覽器不會封鎖連線的警告。
如果您有問題或需要相關協助,請建立支援要求,或詢問 Azure community 支援。 您也可以向 Azure 意見反應社群提交產品意見反應。