在Ubuntu和Certbot上具有SSL的Blazor

问题描述 投票:1回答:1

[这是我的问题:如何使用Certbot生成的证书(让我们加密),使Kestrel的两个同时实例(在同一域中的Apache之后)绑定到各自的SSL端口。我真的需要按照我发现的几篇文章的建议绑定应用程序中的所有端点吗?

这里是背景:

我在Ubuntu 18上的Apache服务器后面有一个具有三个dotnet应用程序的域,我的应用程序在我的开发环境中运行,该环境是Windows 10上的Visual Studio 19。

这些应用是:MVC主站点应用,它本质上是一个博客,Blazor游戏和控制该游戏的API。主站点还使用该API来协调玩家之间的游戏。

MVC和Blazor应用程序均使用Identity Framework并访问相同的用户数据库。 Apache将请求重定向到MVC应用程序的根目录,并将/ blazor之前的任何内容重定向到blazor应用程序。因此,如果用户登录到主应用程序,则浏览器cookie应该允许该用户继续游戏而不必再次登录。

我了解到Blazor要求使用SSL进行身份验证,并且在我的DEV环境中,仅通过UseUrls调用即可将应用绑定到ssl端口。它们都工作正常,但是...

问题在于部署。

在服务器上执行Blazor应用会导致:无法配置HTTPS终结点。不用说,更改UseUrls调用以不使用SSL意味着身份验证失败。

现在,我的服务器使用Certbot,并且可以提供与Apache的安全连接,并且MVC前端可以正常运行(该应用程序本身不是https)。

我一直在研究SSL,并发现了许多有关使用dotnet设置SSL的文章。似乎没有人谈论反向代理的情况。他们似乎都没有谈论域中的多个应用程序。在“让我们加密”的情况下,建议应用程序自己获取并更新证书。如果其中一个应用程序仅可从特定端点使用,则这最后一个选择似乎是一个挑战的问题。并且不同的证书是否意味着登录详细信息将在应用程序之间丢失?

我想指定Certbot证书并让Kestrel绑定到两个前端应用程序上指定的端口。

任何人都可以提出最好的前进方式或将我指向可能有帮助的文章吗?

.net apache ubuntu blazor certbot
1个回答
0
投票
以下内容回答了如何使用Let's Encrypt证书使应用程序绑定的问题,尽管如此,我的Blazer仍然无法对用户进行身份验证。我相信这是SignalR的问题。

首先要做的是将/ etc / letsencrypt / live / domain /中找到的fullchain.pem和privkey.pem合并到Kestrel所需的.pfx文件中:

sudo openssl pkcs12 -export -out https-le.pfx -inkey live/domain/privkey.pem -in live/domain/fullchain.pem

这将提示您输入密码。这将允许Kestrel访问文件。而且,就访问而言,该文件需要具有适当的文件权限。我将文件复制到/ usr / share / ca-certificates / dotnet /,然后更改了文件许可权:

sudo chmod 644 https-le.pfx

在此之下,我在Startup.cs的ConfigureServices()方法中使用的代码。我选择在此位置配置Kestrel,以轻松访问环境变量和appsettings.json。

byte[] localhost = { 127, 0, 0, 1 }; IPAddress address = new IPAddress(localhost); options.Listen(address, Int32.Parse(Configuration["GnomePorts:Https"]), listenOptions => { if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != "Development") listenOptions.UseHttps(Configuration["SSL_Cert:Path"], Configuration["SSL_Cert:Password"]); else listenOptions.UseHttps(); });

接下来,证书应在本地受信任。我将fullchain.pem文件复制到/usr/share/ca-certificates/dotnet/http-le.crt(文件类型可以互换),并且还更改了它的权限:

sudo chmod 644 https-le.crt

然后像这样更新受信任的证书:

sudo dpkg-reconfigure ca-certificates

这将允许您选择将哪些证书添加到受信任的证书捆绑包文件中。 

接下来,要允许Apache转发到SSL连接,应将SSLProxyEngine设置为on并将SSLCACertificateFile指向捆绑文件:

SSLProxyEngine on SSLCACertificateFile /etc/ssl/certs/ca-certificates.crt ProxyPass /gnomes https://127.0.0.1:5003/gnomes ProxyPassReverse /gnomes https://127.0.0.1:5003/gnomes ProxyPass / https://127.0.0.1:5001/ ProxyPassReverse / https://127.0.0.1:5001/

注意,这是在虚拟主机中为端口443完成的,并且certbot添加的包含项已将SSLEngine设置为on。 

完成所有这些操作后,应用程序将很高兴地绑定到SSL,并且Apache将成功重定向。

如果您尝试这样做,请不要忘记“让我们加密”证书在90天后过期,因此您可以考虑安排脚本来在更新主证书时更新文件。

[尽管SSL似乎可以使用,但我仍然相信SSL尚未完全链接,这就是Blazor应用无法对用户进行身份验证的原因。我不确定。我的代码可能有问题。如果发现问题,我将对此进行更新。

© www.soinside.com 2019 - 2024. All rights reserved.