将现有的自定义 SSL 证书绑定到 Azure Web 应用

Azure Web 应用提供高度可缩放、自修补的 Web 托管服务。 本教程介绍如何将从受信任证书颁发机构那里购买的自定义 SSL 证书绑定到 Azure Web 应用。 完成本教程后,你便可以访问自定义 DNS 域的 HTTPS 终结点上的 Web 应用。

包含自定义 SSL 证书的 Web 应用

本教程介绍如何执行下列操作:

  • 升级应用的定价层
  • 将自定义 SSL 证书绑定到应用服务
  • 为应用实施 HTTPS
  • 使用脚本自动执行 SSL 证书绑定

先决条件

若要完成本教程,需执行以下操作:

SSL 证书的要求

若要在应用服务中使用证书,该证书必须满足以下所有要求:

  • 已由受信任的证书颁发机构签名
  • 已导出为受密码保护的 PFX 文件
  • 包含长度至少为 2048 位的私钥
  • 包含证书链中的所有中间证书

准备 Web 应用

若要将自定义 SSL 证书绑定到 Web 应用,应用服务计划必须位于“基本”、“标准”或“高级”层。 在此步骤中,请确保 Web 应用位于受支持的定价层。

登录 Azure

打开 Azure 门户

在左侧菜单中单击“应用服务”,然后单击你的 Web 应用的名称。

选择 Web 应用

你已登录到了 Web 应用的管理页面。

检查定价层

在 Web 应用页面的左侧导航窗格中,向下滚动到“设置”部分,然后选择“扩大(应用服务计划)”。

扩展菜单

检查以确保 Web 应用不在“免费”或“共享”层中。 深蓝色的框突出显示了 Web 应用的当前层。

检查定价层

“免费”和“共享”层不支持自定义 SSL。 如果需要进行扩展,请遵循下一部分中的步骤。 否则,请关闭“选择定价层”页面并跳到上传和绑定 SSL 证书

扩展应用服务计划

选择“基本”、“标准”或“高级”层。

单击“选择”。

选择定价层

如果看到以下通知,则表示缩放操作已完成。

扩展通知

绑定 SSL 证书

现在已准备就绪,可以将 SSL 证书上传到 Web 应用了。

合并中间证书

如果证书颁发机构在证书链中提供了多个证书,则需按顺序合并证书。

若要执行此操作,请在文本编辑器中打开收到的每个证书。

创建名为 mergedcertificate.crt 的合并证书文件。 在文本编辑器中,将每个证书的内容复制到此文件。 证书的顺序应遵循证书链中的顺序,以你的证书开头,以根证书结尾, 如以下示例所示:

-----BEGIN CERTIFICATE-----
<your entire Base64 encoded SSL certificate>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<The entire Base64 encoded intermediate certificate 1>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<The entire Base64 encoded intermediate certificate 2>
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
<The entire Base64 encoded root certificate>
-----END CERTIFICATE-----

将证书导出为 PFX

导出合并的 SSL 证书(其中包含生成证书请求时所用的私钥)。

如果使用 OpenSSL 生成证书请求,则已创建私钥文件。 若要将证书导出为 PFX,请运行以下命令。 将占位符 <private-key-file><merged-certificate-file> 分别替换为私钥和合并证书文件的路径。

openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>  

出现提示时,定义导出密码。 稍后将 SSL 证书上传到应用服务时需使用此密码。

如果使用了 IIS 或 Certreq.exe 来生成证书请求,请将证书安装到你的本地计算机,然后将证书导出为 PFX

上传 SSL 证书

若要上传 SSL 证书,请在 Web 应用的左侧导航窗格中单击“SSL 证书”。

单击“上传证书”。

在“PFX 证书文件”中,选择你的 PFX 文件。 在“证书密码”中,键入导出 PFX 文件时创建的密码。

单击“上传”。

上传证书

应用服务上传完证书后,该证书将显示在“SSL 证书”页中。

上传的证书

绑定 SSL 证书

在“SSL 绑定”部分中,单击“添加绑定”。

在“添加 SSL 绑定”页面中,使用下拉列表选择要保护的域名,然后选择要使用的证书。

Note

如果已上传证书,但未在“主机名”下拉列表中看到域名,请尝试刷新浏览器页面。

在“SSL 类型”中,选择是要使用服务器名称指示 (SNI) 还是使用基于 IP 的 SSL。

  • 基于 SNI 的 SSL - 可添加多个基于 SNI 的 SSL 绑定。 选择此选项可以使用多个 SSL 证书来保护同一 IP 地址上的多个域。 大多数新式浏览器(包括 Internet Explorer、Chrome、Firefox 和 Opera)都支持 SNI(可以在服务器名称指示中了解更全面的浏览器支持信息)。
  • 基于 IP 的 SSL - 只能添加一个基于 IP 的 SSL 绑定。 选择此选项只能使用一个 SSL 证书来保护专用公共 IP 地址。 若要保护多个域,必须使用同一个 SSL 证书来保护所有这些域。 这是 SSL 绑定的传统选项。

单击“添加绑定”。

绑定 SSL 证书

应用服务上传完证书后,该证书将显示在“SSL 绑定”部分中。

证书已绑定到 Web 应用

重新映射 IP SSL 的 A 记录

如果不在 Web 应用中使用基于 IP 的 SSL,请跳到针对自定义域测试 HTTPS

默认情况下,Web 应用使用共享的公共 IP 地址。 将证书与基于 IP 的 SSL 绑定后,应用服务会立即为 Web 应用创建一个新的专用 IP 地址。

如果已将 A 记录映射到 Web 应用,请使用这个新的专用 IP 地址更新域注册表。

将使用新的专用 IP 地址更新 Web 应用的“自定义域”页。 复制此 IP 地址,然后将 A 记录重新映射到此新 IP 地址。

测试 HTTPS

接下来只需确保 HTTPS 适用于自定义域。 在各种浏览器中浏览到 https://<your.custom.domain>,查看是否能够打开你的 Web 应用。

在门户中导航到 Azure 应用

Note

如果 Web 应用显示证书验证错误,可能是因为使用了自签名证书。

如果不是这样,可能是在将证书导出为 PFX 文件时遗漏了中间证书。

实施 HTTPS

应用服务强制实施 HTTPS,因此任何人仍可使用 HTTP 访问你的 Web 应用。 如果想要对 Web 应用强制实施 HTTPS,请在 Web 应用的 web.config 文件中定义重写规则。 无论 Web 应用的语言框架如何,应用服务都会使用此文件。

Note

存在语言特定的请求重定向。 ASP.NET MVC 可使用 RequireHttps 筛选器,而非 web.config 中的重写规则。

如果你是 .NET 开发人员,应该比较熟悉此文件。 此文件位于解决方案的根目录中。

或者,如果你使用 PHP、Node.js、Python 或 Java 进行开发,我们可能会在应用服务中替你生成此文件。

遵循使用 FTP/S 将应用部署到 Azure 应用服务中的说明连接到 Web 应用的 FTP 终结点。

此文件应位于 /home/site/wwwroot 中。 如果不是,请使用以下 XML 在此文件夹中创建 web.config 文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- BEGIN rule ELEMENT FOR HTTPS REDIRECT -->
        <rule name="Force HTTPS" enabled="true">
          <match url="(.*)" ignoreCase="false" />
          <conditions>
            <add input="{HTTPS}" pattern="off" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
        </rule>
        <!-- END rule ELEMENT FOR HTTPS REDIRECT -->
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

对于现有的 web.config 文件,将整个 <rule> 元素复制到 web.configconfiguration/system.webServer/rewrite/rules 元素中。 如果 web.config 中已有其他 <rule> 元素,请将复制的 <rule> 元素放置在其他 <rule> 元素的前面。

每当用户对你的 Web 应用发出 HTTP 请求时,此规则都会将 HTTP 301(永久重定向)返回到 HTTPS 协议。 例如,它从 http://contoso.com 重定向到 https://contoso.com

有关 IIS URL 重写模块的详细信息,请参阅 URL 重写 文档。

对 Linux 上的 Web 应用强制实施 HTTPS

Linux 上的应用服务不会强制实施 HTTPS,因此所有人仍可使用 HTTP 访问你的 Web 应用。 若要对 Web 应用强制实施 HTTPS,请在 Web 应用的 .htaccess 文件中定义重写规则。

遵循使用 FTP/S 将应用部署到 Azure 应用服务中的说明连接到 Web 应用的 FTP 终结点。

在 /home/site/wwwroot 中,使用以下代码创建 .htaccess 文件:

RewriteEngine On
RewriteCond %{HTTP:X-ARR-SSL} ^$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

每当用户对你的 Web 应用发出 HTTP 请求时,此规则都会将 HTTP 301(永久重定向)返回到 HTTPS 协议。 例如,将请求从 http://contoso.com 重定向到 https://contoso.com

使用脚本自动化

可以在 Azure CLIAzure PowerShell 中使用脚本自动完成 Web 应用的 SSL 绑定。

Azure CLI

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

以下命令上传已导出的 PFX 文件并获取指纹。

thumbprint=$(az webapp config ssl upload \
    --name <app_name> \
    --resource-group <resource_group_name> \
    --certificate-file <path_to_PFX_file> \
    --certificate-password <PFX_password> \
    --query thumbprint \
    --output tsv)

以下命令使用前一命令获取的指纹添加基于 SNI 的 SSL 绑定。

az webapp config ssl bind \
    --name <app_name> \
    --resource-group <resource_group_name>
    --certificate-thumbprint $thumbprint \
    --ssl-type SNI \

Azure PowerShell

以下命令上传已导出的 PFX 文件并添加基于 SNI 的 SSL 绑定。

New-AzureRmWebAppSSLBinding `
    -WebAppName <app_name> `
    -ResourceGroupName <resource_group_name> `
    -Name <dns_name> `
    -CertificateFilePath <path_to_PFX_file> `
    -CertificatePassword <PFX_password> `
    -SslState SniEnabled

公用证书(可选)

可向自己的 Web 应用上传公用证书。 可在应用服务或应用服务环境 (ASE) 中,通过 Web 应用使用公用证书。 若要将证书存储在 LocalMachine 证书存储中,则需要在应用服务环境中使用 Web 应用。 有关详细信息,请参阅如何向 Web 应用配置公用证书

上传公用证书

后续步骤

在本教程中,你已学习了如何执行以下操作:

  • 升级应用的定价层
  • 将自定义 SSL 证书绑定到应用服务
  • 为应用实施 HTTPS
  • 使用脚本自动执行 SSL 证书绑定