【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤
问题描述
在使用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:LocalMachineMy" -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:WINDOWSsystem32 目录,找到 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" /> 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
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!
文章来源于互联网:【Azure 云服务】为Azure云服务配置上自签名的SSL证书步骤