CloudFlare SSL与ASP.NET MVC RequireHttps的兼容性

cod*_*sam 5 asp.net-mvc ssl appharbor cloudflare

我在AppHarbor(使用Amazon EC2)上托管ASP.NET MVC 4站点,我正在使用CloudFlare进行灵活SSL.在尝试使用RequireHttps时,我遇到了重定向循环(310)的问题.问题是,与EC2一样,CloudFlare会在将请求转发到服务器之前终止SSL.然而,尽管亚马逊将X转发,原头,使您能够处理自定义过滤器的要求,CloudFlare的不会出现.或者如果他们这样做,我不知道他们是怎么做的,因为我不能拦截那个级别的流量.我已经尝试过Amazon EC2的解决方案,但它们似乎对CloudFlare没有帮助.

有没有人遇到过这个问题,或者对CloudFlare有足够的了解?

run*_*sen 3

AppHarbor 的负载均衡器故意将标X-Forwarded-Proto头覆盖为请求的实际方案。

请注意,虽然 CloudFlare 灵活的 SSL 选项可能会稍微增加安全性,但仍然有未加密的流量通过公共互联网从 CloudFlare 传输到 AppHarbor。这可以说违背了 SSL 的目的,除了外观和减少攻击向量的数量(例如用户本地网络上的数据包嗅探) - 即它对您的用户来说可能看起来“专业”,但实际上仍然不安全。

这不太理想,特别是因为 AppHarbor 支持安装您自己的证书并包含开箱即用的搭载 SSL。对于源服务器/服务支持 SSL 的场景,CloudFlare 还建议使用“完整 SSL”。所以你有几个选择:

  • 继续使用不安全的“灵活 SSL”选项,但您不应检查X-Forwarded-Proto自定义过滤器中的标头,而应检查标头的属性。本次讨论还有更多细节。RequireHttpsschemeCF-Visitor
  • 使用“Full SSL”并将 CloudFlare 指向您的*.apphb.com主机名。这样,您就可以使用 AppHarbor 应用程序默认启用的免费搭载 SSL。您必须覆盖HostCloudFlare 上的标头才能完成此操作,这里有一篇关于如何执行此操作的博客文章。当然,这将使对您的应用程序的请求看起来像对您的*.apphb.com域发出的请求 - 因此,例如,如果您自动将请求重定向到“规范”URL 或生成绝对 URL,您可能必须考虑到这一点。
  • 上传您的证书并将自定义主机名添加到 AppHarbor。然后在 CloudFlare 上打开“完整 SSL”。这样,主机标头将保持不变,并且您的应用程序将继续工作而无需任何修改。您可以在此知识库文章中阅读有关 AppHarbor 提供的 SSL 选项的更多信息。