无法为在 Elastic Beanstalk AWS 上运行 ASP.NET 的网站强制使用 HTTPS(使用经典负载均衡器)

Posted

技术标签:

【中文标题】无法为在 Elastic Beanstalk AWS 上运行 ASP.NET 的网站强制使用 HTTPS(使用经典负载均衡器)【英文标题】:Unable to force HTTPS for website running ASP.NET on Elastic Beanstalk AWS (With classic Load Balancer) 【发布时间】:2018-12-09 16:47:52 【问题描述】:

所以我终于能够成功创建一个 https 网站。它只是运行模板 ASP.NET Web 项目。我有一个证书,它被添加到 AWS 的 ELB(弹性负载均衡器 - 经典)中。我的环境可以浏览到https://www.mvc.cloudy-skies.org,而且它是安全的。棒极了!但是,仍然存在两个问题:

1 - 您仍然可以浏览到 http:// 并且它可以工作。不理想。 2 - 我通过 OWIN 中间件进行 Azure AD 身份验证。这很好用,但是尽管在登录后在重定向 URL 中指定了 HTTPS,我还是被重定向回该站点的 HTTP 版本。

有人可以帮忙吗?我不知所措。这就是我在 Elastic Beanstalk 环境(负载均衡器)上配置侦听器的方式

我尝试将重定向添加到 Web.Config(例如)

<!--<rewrite>
<rules>
<rule name="Redirect to HTTPS" enabled="true" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="HTTP_X_FORWARDED_PROTO" pattern="https" negate="true" />
    <add input="REMOTE_HOST" pattern="localhost" negate="true" />
    <add input="REMOTE_ADDR" pattern="127.0.0.1" negate="true" />
    <add input="HTTP_HOST" pattern="localhost" negate="true" />
  </conditions>
  <action type="Redirect" url="https://HTTP_HOST/R:1" redirectType="Permanent" />
</rule>
</rules>
</rewrite>-->

但是,由于运行状况检查失败,这会导致 Elastic Beanstalk 部署在更新时失败。我什至尝试在解决方案的根目录中创建一个基本的 html 页面并将其用于运行状况检查,但它仍然失败。关于在 web.config 中指定重定向的某些内容效果不佳。

这真的很简单强制用户遵守HTTPS吗?

【问题讨论】:

更新 - 我已经能够使用 OpenIdConnectAuthenticationNotifications 来确保从 Azure AD 重定向回我的站点的 HTTPS 地址是我问题的 50%,但用户仍然可以 - 在任何时候 - 键入 HTTP 并获取页面的不安全版本。仍然需要解决这个问题。 【参考方案1】:

我发现最好添加一个 CloudFront 分配,并设置“将 HTTP 重定向到 HTTPS”。 CloudFront 终止与您的证书的 TLS 会话,然后使用 http 与您的 Elastic Beanstalk 的 ELB 通信,但公共 Internet 用户会自动重定向到 HTTPS 端点。

这可以通过以下步骤实现:

    转到 CloudFront > 创建分配 > Web 选择 ELB 源 选择查看器策略:将 HTTP 重定向到 HTTPS 选择基于标头的缓存:全部(这允许每个用户进行缓存,但您可能希望稍后对其进行细化) 对象缓存:自定义(禁用默认缓存,稍后查看以优化) 将最小值、最大值和默认 TTL 输入为 0 Cookie 和 QueryString 到所有人 选择合适的价格等级,地区越少越便宜。 备用域名:添加您希望在此分配中定向的所有域名 自定义 SSL 证书(这需要是 us-east-1 中的证书,上面输入的所有域名都作为备用名称。 创建分发后,您需要更新 DNS CNAME 以指向您提供的 ___.cloudfront.net 地址。

【讨论】:

谢谢马特。这听起来像 an 答案,但那里有额外的费用。利用现有组件的解决方案怎么样?还是不可能? CloudFront 并不昂贵。我运行一个非常繁忙的 SaaS 系统,我的 7 个 CloudFront Distributions 的账单不到 5 美元。考虑到每个 ELB 的价格约为 15 美元,CloudFront 是一项很棒的服务。您为使用的东西付费,主要是出口数据传输。 如果它是一个低使用率的网站,一个个人项目,那么它会花费几美分。 为了回答你的问题,当我前一阵子遇到同样的问题时,我也无法让它工作,并在它想要在 https 上时转向应用程序中的重定向......但是我发现CloudFront 并没有回头 :) 它也是 PenTests 和 GDPR 的一大优势,尤其是在 Logging、WAF 和 GuardDuty 方面。 好的,谢谢马特。您是否有任何好的链接指向如何为我的用例设置 CF?我对许多 AWS 服务感到满意,但从不使用 CloudFront。

以上是关于无法为在 Elastic Beanstalk AWS 上运行 ASP.NET 的网站强制使用 HTTPS(使用经典负载均衡器)的主要内容,如果未能解决你的问题,请参考以下文章

无法将 Elastic Beanstalk 日志输出到 CloudWatch

如何在 Elastic Beanstalk 上设置 Loggly?

AWS Elastic Beanstalk 运行状况检查偶尔失败

启用 ZipArchive 的 Elastic Beanstalk 编译 php

Amazon Elastic BeanStalk 错误:无法创建 AWS Elastic Beanstalk 应用程序版本

是否有包含使用 JPA 或 Hibernate 的 Elastic Beanstalk 教程?