我正在升级我的.NET Framework应用程序(UI和API)以使用.NET 7.0。
我刚刚将应用程序部署到生产服务器上,遇到了一个问题。
当我使用-app.UseHttpsRedirection();
浏览到我的网站时,在本地的本地主机url上,它没有找到一个有效的证书,当浏览器提示页面变得可用时,我不得不继续。
在我之前的.NET Framework版本中,没有UseHttpsRedirection
的设置,我可以通过HTTP浏览到我的应用程序,当我从浏览器访问我的应用程序时,我使用AWS ELB处理到HTTPS上的侦听器上的站点的流量,我已经将我的SSL证书导入到AWS中的证书管理器中,并在我站点的DNS记录中的Route 53中引用它,这工作正常。
不幸的是,当AWS尝试重定向到最新版本时,应用程序超时了,我很困惑为什么?
我试图再次创建我的证书作为pfx并将其导入到IIS的prod服务器上,然而当浏览本地主机时,它说证书无效,我只能想象这是因为证书是我的域名专用?但这是必要的一步吗?
我删除了app.UseHttpsRedirection();
,还修改了我的launchSettings.json
以删除https start url(尝试模仿框架版本)。当AWS将我重定向到我的应用程序时,启动URL是通过HTTP(并且超时),但是当我将URL修改为使用HTTPS时,我看到了我的应用程序!我不明白为什么我的.NET框架应用程序在没有任何修改的情况下工作,并且总是通过HTTPS服务器提供,但最新的升级没有相同的行为?
我已经回滚到我以前的版本,直到我弄清楚这一点。
在VonC建议后编辑-
VonC在他的假设是正确的,但我也不得不做两个小的代码更改。我删除了app.UseHttpsRedirection();
(因为所有流量都由我的AWS VPC内部安全处理,我还在UI中向我的program.cs添加了以下内容-
app.UseForwardedHeaders(new ForwardedHeadersOptions()
{
ForwardedHeaders = ForwardedHeaders.XForwardedProto
});
还有任何有同样问题的人,我不得不修改我的HTTP listner在ELB上,使它自动重定向到HTTPS。
1条答案
按热度按时间nkoocmlb1#
当我在localhost url上的服务器上本地浏览我的网站时,它找不到有效的证书,当浏览器提示页面可用时,我不得不继续。
预计:如果您使用localhost或服务器的本地IP浏览站点,则证书将无效,因为它是为您的域名而不是为localhost或IP地址颁发的。它不会影响通过您的域名访问网站的用户。
在我之前的.NET Framework版本中,没有UseHttpRedirection的设置,我可以通过HTTP浏览到我的应用程序,当我从浏览器访问我的应用程序时,我使用AWS ELB处理到HTTPS上的侦听器上的站点的流量,我已经将我的SSL证书导入到AWS中的证书管理器中,并在我站点的DNS记录中的Route 53中引用它,这工作正常。
这意味着HTTPS终止在您之前的设置中在AWS Elastic Load Balancer(ELB)级别处理。
SSL/TLS证书安装在负载均衡器上,负载均衡器负责加密和解密进出客户端的流量。这是一种常见的模式,并且通常被推荐,因为它可以从应用服务器中卸载SSL/TLS加密/解密的计算开销。
当客户端连接到您的网站时,连接将通过HTTPS连接到ELB。但是,从ELB到应用程序服务器的连接可以通过HTTP进行,这就是为什么不需要在应用程序中使用
UseHttpsRedirection
的原因。随着您升级到.NET 7并包含
UseHttpsRedirection
,应用程序现在对所有连接强制执行HTTPS。这可能会导致ELB和应用程序服务器之间的流量路由方式出现问题。如果您想保持以前的行为,即HTTPS在ELB级别处理,HTTP在ELB和服务器之间使用,您可以考虑从应用程序中删除
UseHttpsRedirection
中间件。请记住,从安全Angular 来看,只要ELB和应用程序服务器之间的流量位于安全网络(例如AWS VPC)内,这种方法就很好。这被称为负载平衡器处的SSL/TLS终止。
然而,同样值得注意的是,.NET 7引入了指定单独HTTP和HTTPS配置文件的功能(如
dotnet/aspnetcore
第44722期所示),这可能会给您在管理流量模式时提供更大的灵活性。OP补充说:
我删除了
app.UseHttpsRedirection();
(因为所有流量都由我的AWS VPC内部安全处理)。我还在UI中的
program.
cs中添加了以下内容还有任何有同样问题的人,我不得不修改我的HTTP listner在ELB上,使它自动重定向到HTTPS。
通过进行这些更改,您可以将SSL终止委托给ELB,同时仍然为客户端维护安全通信。
这是一种常见的配置,被认为是在负载平衡器或反向代理之后部署应用程序的最佳实践。