問題描述
在使用Azure Cloud Service(雲服務),預設的情況下都是使用的 HTTP 服務,透過 Visual Studio 2022 建立的預設 Cloud Service專案中,在ServiceDefinition.csdef 服務定義檔案中,值預設開啟了HTTP 80的Endpoint。
<InputEndpoint name="Endpoint1" protocol="http" port="80" />
而如果要讓雲服務使用HTTPS,需要那些操作步驟呢? 在官網中,有兩部分文件對此有所介紹:
第一部分:雲服務證介紹和生成自簽名證書 https://docs.azure.cn/zh-cn/cloud-services/cloud-services-certs-create#create-a-new-self-signed-certificate
$cert = New-SelfSignedCertificate -DnsName yourdomain.chinacloudapp.cn -CertStoreLocation "cert:\LocalMachine\My" -KeyLength 2048 -KeySpec "KeyExchange" $password = ConvertTo-SecureString -String "your-password" -Force -AsPlainText Export-PfxCertificate -Cert $cert -FilePath ".\my-cert-file.pfx" -Password $password
參照以上兩部分內容,就可以實現為雲服務配置自簽名證書。雖然透過瀏覽器訪問時,還是會提示自簽名證書不受信任,但在實驗階段已完全可用!
最終結果如下:
實現步驟
第一步: 透過Windows 機器使用Powershell指令碼生成 以雲服務域名為主題的自簽名證書 (注意:需要以管理員許可權執行PowerShell)
注意:如果沒有使用管理員許可權執行 New-SelfSignedCertificate 命令,則會出現許可權不夠的提示資訊“New-SelfSignedCertificate : CertEnroll::CX509Enrollment::_CreateRequest: Access is denied. 0x80070005 (WIN32: 5 ERROR_ACCESS_DENIED)”。
證書生成完畢後,進入C:\WINDOWS\system32 目錄,找到 my-cert-file.pfx 檔案,雙擊,安裝此證書到本機。最後,透過 Certmgr 證書管理工具檢視證書的指紋資訊(thumbprint)
第二步:修改雲服務配置檔案,新增 Certificates , Endpoints 以及 Site Binding
參考“為Azure雲服務配置SSL”文章中的第二部分,修改服務定義和配置檔案。可以完全參考文件中的步驟2操作,本試驗中,因為使用的是自簽名證書,所以就沒有有配置CA root部分。
一:修改 ServiceDefinition.csdef 檔案中的 Certificates, InputEndpoint 和 Site Binding
<?xml version="1.0" encoding="utf-8"?> <ServiceDefinition name="AzureCloudService1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6"> <WebRole name="WebRole2" vmsize="Standard_D1_v2"> <Sites> <Site name="Web"> <Bindings> <Binding name="Endpoint1" endpointName="Endpoint1" /> <Binding name="HttpsIn" endpointName="HttpsIn" /> </Bindings> </Site> </Sites> <ConfigurationSettings> <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"/> </ConfigurationSettings> <Endpoints> <InputEndpoint name="Endpoint1" protocol="http" port="80" /> <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="SampleCertificate" /> </Endpoints> <Imports> <Import moduleName="RemoteAccess" /> <Import moduleName="RemoteForwarder" /> </Imports> <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> </ServiceDefinition>
- 在 Sites 節中新增 Binding 元素。 此元素新增 HTTPS 繫結以將終結點對映到站點
- 在“Endpoints”部分中新增 InputEndpoint 元素以啟用 HTTPS
- Certificates 節定義了證書的名稱、位置及其所在儲存的名稱
二:在服務配置檔案 (CSCFG) ServiceConfiguration.Cloud.cscfg 中,新增 Certificates 值併為其指定證書的指紋(thumbprint)
<?xml version="1.0" encoding="utf-8"?> <ServiceConfiguration serviceName="AzureCloudService1" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="6" osVersion="*" schemaVersion="2015-04.2.6"> <Role name="WebRole2"> <Instances count="1" /> ... ... <Certificates> <Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="B8E0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXD6D8" thumbprintAlgorithm="sha1" /> <Certificate name="SampleCertificate" thumbprint="deb8bff5ced1e43e0723cdf9857b6a6ca1d793b2" thumbprintAlgorithm="sha1" /> </Certificates> </Role> </ServiceConfiguration>
在雲服務專案檔案中修改的動圖說明如下:
第三步:上傳第一步生成的 my-cert-file.pfx證書到 雲服務的 Certificates 頁面
在門戶中,上傳服務證書。 這一步需要在部署之前操作,否則會出現部署失敗。失敗原因為:The certificate with thumbprint deb8bff5ced1e43e0723cdf9857b6a6ca1d793b2 was not found.'
第四步:重新部署雲服務, 然後使用https訪問,而不是http
如果使用自簽名證書,瀏覽到與自簽名證書關聯的 HTTPS 終結點時,瀏覽器中可能會顯示一個證書錯誤。 使用由受信任證書頒發機構簽名的證書可消除此問題;同時,你可以忽略此錯誤。 (也可以將自簽名證書新增到使用者的受信任證書頒發機構證書儲存中。)
參考資料
雲服務證介紹和生成自簽名證書 : https://docs.azure.cn/zh-cn/cloud-services/cloud-services-certs-create#create-a-new-self-signed-certificate