在 Azure Spring Apps 的应用程序中使用 TLS/SSL 证书
注意
基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告。
标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。
本文介绍如何在 Azure Spring Apps 中为应用程序使用公共证书。 应用可以充当客户端并可访问需要证书身份验证的外部服务,否则可能需要执行加密任务。
让 Azure Spring Apps 管理 TLS/SSL 证书时,可以分开维护证书和应用程序代码,以保护敏感数据。 应用代码可以访问添加到 Azure Spring Apps 实例的公共证书。
先决条件
- 一个已部署到 Azure Spring Apps 的应用程序。 请参阅快速入门:在 Azure Spring Apps 中部署你的第一个应用程序,或使用现有应用。
- 具有 .crt、.cer、.pem 或 .der 扩展名的证书文件或使用私有证书的 Azure Key Vault 部署实例。
导入证书
可以选择将证书从 Key Vault 导入到 Azure Spring Apps 实例,也可以使用本地证书文件。
导入来自 Key Vault 的证书
在导入证书之前,需要授予 Azure Spring Apps 对密钥保管库的访问权限。
Azure Key Vault 提供了两个授权系统:在 Azure 的控制平面和数据平面上运行的 Azure 基于角色的访问控制 (Azure RBAC) 和只在数据平面上运行的访问策略模型。
使用以下步骤授予访问权限:
登录到 Azure 门户。
选择“密钥保管库”,然后选择要从中导入证书的密钥保管库。
在导航窗格中,选择“访问策略”,然后选择“创建。
选择“证书权限”,然后选择“获取”和“列出” 。
在“主体”下,选择“Azure Spring Cloud 资源提供程序”。
依次选择“查看 + 创建”、“创建” 。
授予密钥保管库访问权限后,可以使用以下步骤导入证书:
转到你的服务实例。
在实例的左侧导航窗格中,选择“TLS/SSL 设置”。
选择“公钥证书”部分中的“导入 Key Vault 证书”部分。
在“密钥保管库”部分中选择你的密钥保管库,在“证书”部分中选择你的证书,然后选择“选择”。
提供“证书名称”值,根据需要选择“启用自动同步”,然后选择“应用”。 有关详细信息,请参阅将现有的自定义域映射到 Azure Spring Apps 的自动同步证书部分。
成功导入证书后,可在“公钥证书”列表中看到它。
注意
Azure Key Vault 和 Azure Spring Apps 实例应位于同一租户中。
导入本地证书文件
可以使用以下步骤导入本地存储的证书文件:
- 转到你的服务实例。
- 在实例的左侧导航窗格中,选择“TLS/SSL 设置”。
- 选择“公钥证书”部分中的“上传公用证书”部分。
成功导入证书后,可在“公钥证书”列表中看到它。
加载证书
若要将证书加载到 Azure Spring Apps 中的应用程序,请先执行以下步骤:
- 转到应用程序实例。
- 在你的应用的左侧导航窗格中,选择“证书管理”。
- 选择“添加证书”,为应用选择可访问的证书。
从代码加载证书
加载的证书在 /etc/azure-spring-cloud/certs/public 文件夹中提供。 使用以下 Java 代码在 Azure Spring Apps 的应用程序中加载公共证书。
CertificateFactory factory = CertificateFactory.getInstance("X509");
FileInputStream is = new FileInputStream("/etc/azure-spring-cloud/certs/public/<certificate name>");
X509Certificate cert = (X509Certificate) factory.generateCertificate(is);
// use the loaded certificate
将证书加载到信任存储区
对于 Java 应用程序,可以对所选证书选择“加载到信任存储区”。 此证书会自动添加到 Java 默认 TrustStores 中,以便在 TLS/SSL 身份验证中对服务器进行身份验证。
应用中的以下日志显示证书已成功加载。
Load certificate from specific path. alias = <certificate alias>, thumbprint = <certificate thumbprint>, file = <certificate name>