无法为在 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 应用程序版本