在 Azure 中启用 HTTPS 通信云服务 (扩展支持)

使用超文本传输协议安全 (HTTPS) 协议与Microsoft Azure 云服务 (扩展支持) 进行通信。 本文讨论如何为云服务 (扩展支持) 启用 HTTPS 通信。

先决条件

项目部署的常规步骤

将云服务 (扩展支持) 项目部署到 Azure 的常规步骤如下:

  1. 准备证书。

  2. 配置项目。

  3. 将项目文件打包到云服务的服务定义 (.csdef) 、服务配置 (.cscfg) 和服务包 (.cspkg) 文件中。

  4. 如有必要,请更改云服务 (扩展支持) 资源的配置。 例如,可以进行以下任何修改:

    1. 更新包 URL。
    2. 配置 URL 设置。
    3. 更新操作系统机密设置。
  5. 将新项目部署和更新到 Azure。

注意

可以通过多种不同的方法部署项目,例如使用以下工具:

无论部署方法如何,常规部署步骤都是相同的。

这些步骤中的前两个是所有部署方法所必需的。 代码 更改 部分介绍了这些步骤。 其余步骤也很重要,但它们并不总是需要手动用户干预。 例如,这些步骤可能由 Visual Studio 等工具自动完成。 其中最后三个步骤将在 配置更改 部分讨论。

代码更改

若要更改代码以准备证书并配置项目,请执行以下步骤:

  1. 按照说明通过步骤 6 将证书上传到密钥保管库

  2. (40 位十六进制字符串) 记下证书的指纹。

  3. 在项目的 服务配置 (.cscfg) 文件中 ,将证书指纹添加到要使用证书的角色。 例如,如果要使用证书作为 SSL 证书来与 WebRole 通信,则可以添加类似于以下 代码片段的 WebRole1 XML 代码作为根 ServiceConfiguration 元素的第一个子元素:

    <Role name="WebRole1">
      <Instances count="1" />
      <Certificates>
        <Certificate
          name="Certificate1"
          thumbprint="0123456789ABCDEF0123456789ABCDEF01234567"
          thumbprintAlgorithm="sha1"
        />
      </Certificates>
    </Role>
    

    可以自定义证书的名称,但它必须与服务定义 (.csdef) 文件中使用的证书名称匹配。

  4. 服务定义 (.csdef) 文件中,添加以下元素。

    父 XPath 要添加的元素 要使用的属性
    /ServiceDefinition/WebRole/Sites/Site/Bindings Binding nameendpointName
    /ServiceDefinition/WebRole/Endpoints InputEndpoint 名称协议端口证书
    /ServiceDefinition/WebRole Certificates/Certificate namestoreLocationstoreNamepermissionLevel

    元素 Certificates 必须直接添加到结束 Endpoints 标记之后。 它不包含任何属性。 它仅包含子 Certificate 元素。

    例如,服务定义文件可能类似于以下 XML 代码:

    <?xml version="1.0" encoding="utf-8"?>
    <ServiceDefinition name="CSESOneWebRoleHTTPS" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6">
      <WebRole name="WebRole1" vmsize="Standard_D1_v2">
        <Sites>
          <Site name="Web">
            <Bindings>
              <Binding name="Endpoint1" endpointName="Endpoint1" />
              <Binding name="HttpsIn" endpointName="HttpsIn" />
            </Bindings>
          </Site>
        </Sites>
        <Endpoints>
          <InputEndpoint name="Endpoint1" protocol="http" port="80" />
          <InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="Certificate1" />
        </Endpoints>
        <Certificates>
          <Certificate name="Certificate1" storeLocation="LocalMachine" storeName="My" permissionLevel="limitedOrElevated" />
        </Certificates>
      </WebRole>
    </ServiceDefinition>
    

    在此示例中,服务定义文件已修改为端口 443 上的 HTTPS 协议绑定 的 HttpsIn 输入终结点。 Certificate1它将证书用于名称为 且位置LocalMachine仅为有限权限级别或提升权限级别的存储My。 和 Certificate 元素中的InputEndpoint证书名称相互匹配。 它们还与上一步中的服务配置 (.cscfg) 文件中使用的证书名称匹配。

配置更改

更改云服务配置的说明因云服务的部署方式而异。 这些说明显示在以下选项卡上。 每个选项卡表示不同的部署方法。

在继续之前,请参阅使用 Azure 门户部署 Azure 云服务 (扩展支持) 。 然后,按照以下步骤通过Azure 门户进行正确的配置更改:

  1. 转到标题为“ 使用 ARM 模板手动从经典云服务迁移到云服务扩展支持”的博客文章,并按照步骤 7 到 9 进行操作。 这些说明演示如何执行以下步骤:

    • 打包项目。

    • 将生成的服务包 (<project-name.cspkg>) 和云服务配置 (ServiceConfiguration.Cloud.cscfg) 文件上传到云服务的存储帐户容器中。

      注意

      此外,还必须使用针对其他两个文件描述的相同过程, (ServiceDefinition.csdef) 文件上传服务定义。

    • 为每个上传的文件生成共享访问签名 (SAS) URL。

  2. Azure 门户,返回到云服务的“概述”页,然后选择“更新”。

  3. “更新云服务 ”页上,在“ 基本信息 ”选项卡上进行以下更改:

    1. “包/配置/服务定义位置 ”字段中,选择“ 从 blob”。

    2. “上传包 (.cspkg”.zip) 字段中,执行以下步骤:

      1. 选择“ 浏览” 链接。
      2. 选择将文件上传到的存储帐户和容器。
      3. 在容器页中,选择相应的文件 (在本例中为 <project-name.cspkg>) ,然后选择“选择”按钮。
    3. 对于 “上传配置 (.cscfg) ”字段 (和 ServiceConfiguration.Cloud.cscfg 文件) ,请重复上一步中概述的子过程。

    4. 对于 “上传服务定义 (.csdef) 字段 (和 ServiceDefinition.csdef 文件) ,请再次重复子过程。

  4. 选择“ 配置 ”选项卡。

  5. “密钥保管库 ”字段中,选择之前) “代码更改 ”部分 (上传证书的密钥保管库。 在所选密钥保管库中找到证书后,列出的证书将显示“已找到状态”。

  6. 若要部署新配置的项目,请选择“ 更新 ”按钮。

更改配置后,客户将能够使用 HTTPS 协议与云服务网站通信。 如果证书是自签名的,浏览器可能会报告证书不安全的警告,但浏览器不会阻止连接。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。