问:如何在一个 Azure 云服务部署中使用 HTTPS 在两个网站之间进行通信?
细节:
我已经构建了一个 Azure 云服务部署(一个“subdomain.cloudapp.net”),以便通过使用不同的端口在部署内运行两个单独的网站。
站点 1 是我所说的服务站点,它是一个标准的 ASP.NET 站点,它托管一堆没有 HTML 或 ASPX 页面的 WCF 服务(除了重定向到站点 2 的 default.aspx 页面)。站点 1 在端口 80 上运行。
站点 2 是我的主站点,它托管一个 Silverlight 应用程序,该应用程序使用站点 1 的服务来访问数据库和处理结果。它只能通过 HTTPS 访问并使用端口 443。
这两个站点都在具有两个端点的 Visual Studio Azure 解决方案中定义,每个端口一个。此外,每个端点都通过 Azure 项目中的 ServiceDefinition.csdef 配置文件与 VS 解决方案内部的两个网站项目相关联。
我已经购买了我的安全证书,并通过我的 DNS 中的域名重定向和 CName 映射将它与我在站点 2 中使用的域名相关联。
使用映射域名和加密连接通过 HTTPS 访问站点 2 效果很好。但是,当我尝试在内部从站点 2 到站点 1 进行服务调用时,我将从 HTTPS 连接转到 HTTP 连接,因为我在站点 1 没有 SSL 证书。因此,当站点 2 使对站点 1 的服务调用,它尝试为 clientaccesspolicy.xml 提供服务。这会导致 Internet Explorer 显示“混合内容”消息(因为 HTTPS/HTTP 混合)。底线是我需要摆脱这个弹出提示。我知道它可以在客户端禁用,但是有超过一千个用户,我不能指望他们能够关闭消息。我需要让消息在服务器端消失。
回到这个问题,那么有没有办法在一个 Azure 云服务中使用来自站点 2 的 SSL 访问站点 1?听起来我需要做的是为站点 1 分配一个 SSL 证书。但是,我遇到了两个障碍。首先,我无法将 SSL 证书分配给 wildcard.clouapp.net 域名。其次,我无法为 Azure 云服务分配第二个域名,因为我无法将域名转发到特定端口(请记住,站点 2 已经在使用域转发)。
我可以通过将两个站点拆分为各自的云服务来完成解决方案,但我宁愿不这样做,因为这会使我的成本翻倍。关于如何通过保护站点 1 或其他方法来消除此“混合内容”消息,是否有任何建议?