我们在 Azure 应用服务上托管了一个 Web 应用程序 (C#/.Net Core)。应用服务的访问限制配置为仅允许通过 Azure Front Door 访问。
Front Door 设置了路由到应用服务后端的自定义子域。
为了使应用程序正常运行,它需要知道正在访问的 URL(我们必须生成面向用户的绝对 URL,但它们应该基于用户正在访问它的 URL。)
总结一下:
- myapp.company.com 有一个指向 Azure Front Door (myfrontdoor.azurefd.net) 的 CNAME DNS 条目。
- Front Door 将 myapp.mycompany.com 作为前端域进行监听。Front Door 管理此子域的 TLS/SSL 证书。
- Front Door 将流量从 myapp.mycompany.com 路由到 Azure 应用服务 (myapp.azurewebsites.net)。“后端主机标头”字段设置为用户用于访问站点 (myapp.mycompany.com) 的 URL。
- 由于在应用服务上运行的代码需要知道用户使用哪个 URL 来访问它(例如,需要通过 myapp.mycompany.com 而不是 myapp.azurewebsites.net 来访问),因此自定义子域将作为“自定义域”添加到应用服务配置中。如果不这样做,应用服务将不会接受来自 Front Door 的连接,因为它不会发送默认主机标头(myapp.azurewebsites.net)。
此配置是实用的 - 应用服务上运行的 Web 应用可以知道它是通过自定义域 (myapp.mycompany.com) 进行访问的。
但是,在此配置中,我无法将 TLS/SSL 证书添加到应用服务的自定义域。 Azure 中的此功能依赖于 DNS 验证 - 自定义子域必须具有指向应用服务默认 URL (myapp.azurewebsites.net) 的 CNAME 记录才能创建证书。 但是,子域 CNAME 需要指向 Front Door (myfrontdoor.azurefd.net),以便 Front Door 在前端管理证书。
应用服务的 Azure 门户页面抱怨自定义域的“SSL 状态”因此“不安全”,并且确实降低了安全性 - Front Door 与应用服务之间的通信实际上不受证书保护。
有没有什么办法可以解决这个问题?