使用 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

在 Kerberos 模式下,通过 WebHttpBinding 连接自托管 WCF 服务失败

用于支持 HTTP 和 HTTPS 的 WebHttpBinding(Restful) 的 WCF 配置