在 Azure 設定應用程式的 TLS
重要
截至 2024 年 9 月 1 日,所有客戶的雲端服務 (傳統) 均已淘汰。 自 2024 年 10 月起,Microsoft 將停止並關閉任何執行中的現有部署,且資料將永久遺失。 新部署應該使用 Azure Resource Manager 型的新部署模型 Azure 雲端服務 (延伸支援)。
傳輸層安全性 (TLS),過去稱為安全通訊端層 (SSL) 加密,這是保護網際網路上傳送資料的最常用方法。 此常見工作會討論如何為 Web 角色指定 HTTPS 端點,以及如何上傳 TLS/SSL 憑證來保護應用程式的安全。
注意
此工作的程序適用於 Azure 雲端服務,若為應用程式服務,請參閱 此處。
此工作使用生產部署。 本文結尾提供的資訊與如何使用預備部署有關。
如果您尚未建立雲端服務,請參閱如何先建立與部署 Azure 雲端服務 (傳統)。
步驟 1:取得 TLS/SSL 憑證
若要設定應用程式的 TLS,首先您需要取得已由憑證授權單位 (CA) (專門核發憑證的受信任合作夥伴) 簽署的 TLS/SSL 憑證。 如果您還沒有此類憑證,則必須向銷售 TLS/SSL 憑證的公司取得。
憑證必須符合 Azure 中對於 TLS/SSL 憑證的下列要求:
- 憑證必須包含公開金鑰。
- 憑證必須是為了進行金鑰交換而建立,且可匯出成個人資訊交換檔 (.pfx)。
- 憑證的主體名稱必須符合用來存取雲端服務的網域。 您無法向憑證授權單位 (CA) 取得 cloudapp.net 網域的 TLS/SSL 憑證。 您必須取得要在存取服務時使用的自訂網域名稱。 當您向 CA 要求憑證時,憑證的主體名稱必須符合用來存取應用程式的自訂網域名稱。 例如,如果您的自訂網域名稱為 contoso.com,則您需向 CA 要求 *.contoso.com 或 www.contoso.com 憑證。
- 憑證至少必須以 2048 位元加密。
基於測試目的,您可以 建立 並使用自我簽署憑證。 自我簽署憑證不是由 CA 驗證,因此可以使用 cloudapp.net 網域作為網站 URL。 例如,以下工作即使用自我簽署憑證,該憑證中使用的一般名稱 (CN) 為 sslexample.cloudapp.net。
接下來,您必須在服務定義檔與服務組態檔中加入憑證的相關資訊。
步驟 2:修改服務定義檔和組態檔
您的應用程式必須已設定為使用憑證,而且您必須新增 HTTPS 端點。 因此,您需要更新服務定義檔與服務組態檔。
在開發環境中,開啟服務定義檔 (CSDEF)、在 [WebRole] 區段內新增 [Certificates] 區段,並新增下列憑證 (及中繼憑證) 相關資訊:
<WebRole name="CertificateTesting" vmsize="Small"> ... <Certificates> <Certificate name="SampleCertificate" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" /> <!-- IMPORTANT! Unless your certificate is either self-signed or signed directly by the CA root, you must include all the intermediate certificates here. You must list them here, even if they are not bound to any endpoints. Failing to list any of the intermediate certificates may cause hard-to-reproduce interoperability problems on some clients.--> <Certificate name="CAForSampleCertificate" storeLocation="LocalMachine" storeName="CA" permissionLevel="limitedOrElevated" /> </Certificates> ... </WebRole>
Certificates 區段定義憑證的名稱、位置,以及其所在的存放區名稱。
權限 (
permissionLevel
屬性) 可設為下列其中一個值:權限值 描述 limitedOrElevated (預設值) 所有角色處理序都可以存取私密金鑰。 elevated 只有較高權限的處理序可以存取私密金鑰。 在服務定義檔中,於 Endpoints 區段內新增 InputEndpoint 元素,以啟用 HTTPS:
<WebRole name="CertificateTesting" vmsize="Small"> ... <Endpoints> <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="SampleCertificate" /> </Endpoints> ... </WebRole>
在服務定義檔中,於 Sites 區段內新增 Binding 元素。 此項目會新增 HTTPS 繫結,以將端點對應至您的站台:
<WebRole name="CertificateTesting" vmsize="Small"> ... <Sites> <Site name="Web"> <Bindings> <Binding name="HttpsIn" endpointName="HttpsIn" /> </Bindings> </Site> </Sites> ... </WebRole>
如此即已對服務定義檔完成所有必要變更,但是您仍然需要將憑證資訊新增至服務組態檔。
在服務組態檔 (CSCFG) ServiceConfiguration.Cloud.cscfg 中,新增憑證值以取代您的憑證。 下列程式碼範例會提供 [憑證] 區段的詳細資料,指紋值除外。
<Role name="Deployment"> ... <Certificates> <Certificate name="SampleCertificate" thumbprint="9427befa18ec6865a9ebdc79d4c38de50e6316ff" thumbprintAlgorithm="sha1" /> <Certificate name="CAForSampleCertificate" thumbprint="79d4c38de50e6316ff9427befa18ec6865a9ebdc" thumbprintAlgorithm="sha1" /> </Certificates> ... </Role>
(本例針對指紋演算法使用 sha1。請指定適當的值作為憑證的指紋演算法。)
既然您已更新服務定義與服務組態檔,請封裝要上傳至 Azure 的部署。 如果您是使用 cspack,請確定未使用 /generateConfigurationFile 旗標,因為如此會覆寫您插入的憑證資訊。
步驟 3:上傳憑證
連線到 Azure 入口網站並...
在入口網站的 [所有資源] 區段中,選取您的雲端服務。
選取 [憑證]。
選取憑證區上方的 [上傳]。
提供 [檔案]、[密碼],然後選取資料輸入區底部的 [上傳]。
步驟 4:使用 HTTPS 來連線至角色執行個體
您的部署已在 Azure 啟動並執行,現在您可以使用 HTTPS 來與其連線。
選取 [網站 URL] 以開啟網頁瀏覽器。
在網頁瀏覽器中,將連結修改為使用 https 而非 http,然後造訪網頁。
注意
如果使用自我簽署憑證,則當您在瀏覽器中瀏覽至與該自我簽署憑證相關聯的 HTTPS 端點時,您會看見憑證錯誤。 使用信任的憑證授權單位所簽署的憑證,則不會有此問題;因此,您可以忽略該錯誤。 (另一個選項為新增自我簽署憑證至使用者的受信任憑證授權單位憑證存放區。)
提示
若要對預備部署而不是對生產部署使用 TLS,首先您需要決定在預備部署中使用的 URL。 部署雲端服務之後,預備環境的 URL 即由部署 ID GUID 決定,格式如下:
https://deployment-id.cloudapp.net/
建立一般名稱 (CN) 等於 GUID 型 URL (如 328187776e774ceda8fc57609d404462.cloudapp.net) 的憑證。 使用入口網站將憑證新增至預備的雲端服務。 接著,將憑證資訊新增至 CSDEF 和 CSCFG 檔案、重新封裝應用程式,然後更新預備的部署以使用新套件。