使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止
Posted
技术标签:
【中文标题】使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止【英文标题】:WCF configuration for webHttpBinding with SSL terminated at load balancer 【发布时间】:2015-02-11 12:39:38 【问题描述】:我有一个使用 webHttpBinding 的 WCF REST 服务,但在 F5 负载平衡器后面的测试环境中运行它时遇到了一些问题 - 至少我认为负载平衡器是个问题。
该服务已被证明可以使用 http 或 https 在本地运行和操作(“在我的机器上运行”)。该服务托管在使用它的同一站点中。
我们的测试环境位于 F5 负载平衡器后面,该负载平衡器终止 SSL 并通过 http 将请求转发到服务器。我们的 IT 人员表示测试环境的所有传入流量都是 http,并维护该站点在 IIS 中配置了 http 和 https 绑定。我的本地机器和测试环境之间唯一明显的区别是我的本地机器是 IIS 8,而测试环境是 IIS 7.5。
路由是这样注册的:
RouteTable.Routes.Add(new ServiceRoute("REST/stuff", new WebServiceHostFactory(), typeof(StuffService)));
目前,这是在本地工作的相关配置:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true"/>
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint name="" helpEnabled="true" automaticFormatSelectionEnabled="true">
<security mode="Transport"/>
</standardEndpoint>
</webHttpEndpoint>
</standardEndpoints>
<bindings>
<webHttpBinding>
<binding>
<security mode="Transport"/>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
最初,该服务部署到没有 SSL 的测试环境,我在访问使用该服务的页面时收到此错误:
混合内容:“https://foo.bar.com/thing.aspx”处的页面通过 HTTPS 加载,但请求了不安全的 XMLHttpRequest 端点“http://foo.bar.com/REST/stuff/”。此请求已被阻止;内容必须通过 HTTPS 提供。
现在对我来说这似乎很神秘,因为该站点是通过 https 访问的,并且对该服务的调用使用的是相对 URL。不幸的是,我现在无法调试,因为我更改了配置。
在收到上述错误时,我并不了解 F5,并认为我需要做的就是将我的服务配置为使用传输安全性,如上述配置。更改配置以使用传输安全后,服务无法在测试环境中激活,在服务器上引发此错误:
由于编译期间出现异常,无法激活服务“/REST/stuff”。异常消息是:找不到与具有绑定 WebHttpBinding 的端点的方案 https 匹配的基地址。注册的基地址方案是 [http]。
我相信,这表明该服务希望使用 https 运行,但注册的基地址方案中缺少 https 阻止了这一点,因此该服务根本无法初始化。我知道当 IIS 中缺少 https 绑定时,可能会发生这种情况(尽管 IT 认为它没有)。
我不确定我还能做些什么来启用我的用例。非常感谢任何帮助!
【问题讨论】:
【参考方案1】:我的配置很好。出于某种原因,当通过负载均衡器进行交互时,客户端在使用相对 URI 调用服务时没有使用 https。更多关于我认为是我的问题的信息:How to use HTTPS in AngularJS
【讨论】:
以上是关于使用 SSL 的 webHttpBinding 的 WCF 配置在负载均衡器处终止的主要内容,如果未能解决你的问题,请参考以下文章
如何在 webhttpbinding 配置中设置代理以使用提琴手
如何使用 Microsoft JWT 令牌处理程序来保护基于 webHttpBinding 的 WCF 服务
带有 webHttpBinding 的 MessageSecurity
无法在 .NET Core 中使用 WCF WebHttpBinding