在使用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
$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
第二部分:為雲服務 設定TLS https://docs.azure.cn/zh-cn/cloud-services/cloud-services-configure-ssl-certificate-portal
參照以上兩部分內容,就可以實現為雲服務設定自簽名證書。雖然通過瀏覽器存取時,還是會提示自簽名證書不受信任,但在實驗階段已完全可用!
最終結果如下:
注意:如果沒有使用管理員許可權執行 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)
參考「為Azure雲服務設定SSL」文章中的第二部分,修改服務定義和組態檔。可以完全參考檔案中的步驟2操作,本試驗中,因為使用的是自簽名證書,所以就沒有有設定CA root部分。
<?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>
二:在服務組態檔 (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>
在雲服務專案檔案中修改的動圖說明如下:
在門戶中,上傳服務證書。 這一步需要在部署之前操作,否則會出現部署失敗。失敗原因為:The certificate with thumbprint deb8bff5ced1e43e0723cdf9857b6a6ca1d793b2 was not found.'
如果使用自簽名證書,瀏覽到與自簽名證書關聯的 HTTPS 終結點時,瀏覽器中可能會顯示一個證書錯誤。 使用由受信任證書頒發機構簽名的證書可消除此問題;同時,你可以忽略此錯誤。 (也可以將自簽名證書新增到使用者的受信任證書頒發機構證書儲存中。)
雲服務證介紹和生成自簽名證書 : https://docs.azure.cn/zh-cn/cloud-services/cloud-services-certs-create
為雲服務 設定TLS : https://docs.azure.cn/zh-cn/cloud-services/cloud-services-configure-ssl-certificate-portal
當在複雜的環境中面臨問題,格物之道需:濁而靜之徐清,安以動之徐生。 雲中,恰是如此!