将现有自定义域映射到 Azure Spring Apps
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
域名服务 (DNS) 是将网络节点名称存储在整个网络中的一种技术。 本文使用 CNAME 记录来映射域,例如 www.contoso.com
。 本教程将使用证书保护自定义域,并介绍如何强制实施传输层安全性 (TLS)(也称为安全套接字层 (SSL))。
证书用于对 Web 流量进行加密。 可将这些 TLS/SSL 证书存储在 Azure Key Vault 中。
先决条件
- Azure 订阅。 如果你没有订阅,请在开始之前创建一个试用版订阅。
- (可选)Azure CLI 版本 2.45.0 或更高版本。 使用以下命令安装 Azure Spring Apps 扩展:
az extension add --name spring
- 部署到 Azure Spring Apps 的应用程序(请参阅快速入门:使用 Azure 门户启动 Azure Spring Apps 中的现有应用程序,或使用现有应用)。 如果应用程序是使用基本计划部署的,请确保升级到标准计划。
- 一个有权访问域提供商(例如 GoDaddy)的 DNS 注册表的域名。
- 来自第三方提供商的私有证书(即你的自签名证书)。 该证书必须与域匹配。
- 一个已部署的 Azure 密钥保管库实例。 有关详细信息,请参阅关于 Azure 密钥保管库。
Key Vault 专用链接注意事项
Azure Spring Apps 管理的 IP 地址目前不属于 Azure 信任的 Microsoft 服务。 因此,若要允许 Azure Spring Apps 从受专用终结点连接保护的密钥保管库加载证书,必须将以下 IP 地址添加到 Azure Key Vault 防火墙:
20.99.204.111
20.201.9.97
20.74.97.5
52.235.25.35
20.194.10.0
20.59.204.46
104.214.186.86
52.153.221.222
52.160.137.39
20.39.142.56
20.199.190.222
20.79.64.6
20.211.128.96
52.149.104.144
20.197.121.209
40.119.175.77
20.108.108.22
102.133.143.38
52.226.244.150
20.84.171.169
20.93.48.108
20.75.4.46
20.78.29.213
20.106.86.34
20.193.151.132
导入证书
准备 PFX 格式的证书文件(可选)
Azure 密钥保管库支持导入 PEM 和 PFX 格式的专用证书。 如果你从证书提供商获得的 PEM 文件在在密钥保管库中保存证书部分中不能使用,请按照此处所述的步骤为 Azure 密钥保管库生成 PFX。
合并中间证书
如果证书颁发机构在证书链中提供了多个证书,则需按顺序合并证书。
若要执行此任务,请在文本编辑器中打开收到的所有证书。
创建名为 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
使用在生成证书请求时所用的私钥导出合并的 TLS/SSL 证书。
如果使用 OpenSSL 生成证书请求,则已创建私钥文件。 若要将证书导出为 PFX,请运行以下命令。 将占位符 <private-key-file> 和 <merged-certificate-file> 分别替换为私钥和合并证书文件的路径。
openssl pkcs12 -export -out myserver.pfx -inkey <private-key-file> -in <merged-certificate-file>
出现提示时,定义导出密码。 将 TLS/SSL 证书上传到 Azure 密钥保管库时,需要使用此密码。
如果使用 IIS 或 Certreq.exe 生成证书请求,请将证书安装到本地计算机,然后将证书导出为 PFX。
在 Key Vault 中保存证书
导入证书的过程要求 PEM 或 PFX 编码的文件位于磁盘上,并且你必须具有私钥。
使用以下步骤将证书上传到密钥保管库:
授予 Azure Spring Apps 对密钥保管库的访问权限
在导入证书之前,需要授予 Azure Spring Apps 对密钥保管库的访问权限。
使用以下步骤通过 Azure 门户授予访问权限:
将证书导入 Azure Spring Apps
使用以下步骤导入证书:
转至 Azure Spring Apps 实例。
在导航窗格中,选择“TLS/SSL 设置”。
选择“导入密钥保管库证书”。
在“从 Azure 中选择证书”页上,从下拉选项中选择“订阅”、“密钥保管库”和“证书”,然后选择“选择”。
在打开的“设置证书名称”页上,输入证书名称,根据需要选择“启用自动同步”,然后选择“应用”。 有关详细信息,请参阅自动同步证书部分。
成功导入证书后,该证书会显示在“私钥证书”列表中。
重要
若要使用此证书保护自定义域,请确保将此证书绑定到特定的域。 有关详细信息,请参阅“添加 SSL 绑定”部分。
自动同步证书
Azure Key Vault 中存储的证书有时会在过期之前续订。 同样,组织用于管理证书的安全策略可能需要 DevOps 团队定期将证书替换为新证书。 为证书启用自动同步后,Azure Spring Apps 将开始定期同步密钥保管库以获取新版本,通常每隔 24 小时同步一次。 如果有新版本可用,Azure Spring Apps 会导入它,然后使用证书为各种组件重新加载它,而不会造成任何停机。 以下列表显示受影响的组件和相关方案:
- 应用
- 自定义域
当 Azure Spring Apps 导入或重新加载证书时,将生成活动日志。 要查看活动日志,请在 Azure 门户中导航到 Azure Spring Apps 实例,然后在导航窗格中选择“活动日志”。
注意
证书自动同步功能适用于从 Azure Key Vault 导入的专用证书和公共证书。 此功能不适用于客户上传的内容证书。
将证书从密钥保管库导入到 Azure Spring Apps 时,可以启用或禁用证书自动同步功能。 有关详细信息,请参阅“将证书导入 Azure Spring Apps”部分。
还可以为已导入到 Azure Spring Apps 的证书启用或禁用此功能。
使用以下步骤为导入的证书启用或禁用自动同步:
添加自定义域
可以使用 CNAME 记录将自定义 DNS 名称映射到 Azure Spring Apps。
注意
不支持 A 记录。
创建 CNAME 记录
转到 DNS 提供商,并添加 CNAME 记录以将域映射到<service-name>.microservices.azure.cn
。 此处的 <service-name>
是你的 Azure Spring Apps 实例名称。 我们支持通配符域和子域。
添加 CNAME 后,DNS 记录页类似于以下示例:
将自定义域映射到 Azure Spring Apps 应用
如果在 Azure Spring Apps 中没有应用程序,请按照快速入门:将第一个应用程序部署到 Azure Spring Apps 中的说明进行操作。
使用以下步骤将自定义域绑定到应用:
转到应用程序页。
选择“自定义域”。
选择“添加自定义域”。
键入你为其添加了 CNAME 记录的完全限定的域名,例如
www.contoso.com
。 确保主机名记录类型设置为 CNAME -<service-name>.microservices.azure.cn
。选择“验证”以启用“添加”按钮 。
选择 添加 。
一个应用可以有多个域,但一个域只能映射到一个应用。 成功将自定义域映射到应用后,该域会显示在自定义域表中。
注意
自定义域带有“不安全”标签意味着该域尚未绑定到 SSL 证书。 从浏览器向自定义域发出任何 HTTPS 请求都会收到错误或警告。
添加 SSL 绑定
成功添加 SSL 绑定后,域将处于安全状态:“正常运行”。
实施 HTTPS
默认情况下,所有人仍可使用 HTTP 访问你的应用,但你可以将所有 HTTP 请求重定向到 HTTPS 端口。
该操作完成后,导航到指向你的应用的任一 HTTP URL。 请注意,HTTP URL 不起作用。