在使用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