首页 > 解决方案 > 让我们使用 ASP.Net Core 和 Azure 应用服务进行加密

问题描述

我在 Azure 中有一个 Runbook,它使用 AcmeSharp 为在 Azure App Services 中运行的网站生成 Let's Encrypt 证书。我已经在许多 ASP.Net 网站上成功使用过它很多次。显然,到目前为止,我从未在 ASP.Net Core (2.2) 站点上尝试过它。

我很确定我遇到了这篇博文中描述的问题 - https://ronaldwildenberg.com/letsencrypt-for-asp-net-core-on-azure。基本上,该脚本会在我的站点中将静态文件发布到 /.wellknown/acme-challenge/randomstring/index.html,然后 Let's Encrypt 尝试验证该文件。即使我可以在 Kudu 的文件系统中看到它,我在尝试访问此 URL 时也会收到 404。

我觉得这是 ASP.Net Core 中的静态文件问题,当我找到上面提到的博客文章时 - 我认为这将是答案。我按照文章中的说明更改了我的代码,但我仍然得到 404。

与文章略有不同,我的脚本不是像文章截图中那样具有长随机字符串的文件,而是生成一个这样的字符串,但会创建一个具有该名称的文件夹。每个文件夹内都有一个文件(名为 index.html),其中包含 Let's Encrypt 正在寻找的验证信息。你可以在http://www.technicality.online/.well-known/acme-challenge/看到这个

您可以看到这些文件夹是可浏览的,如果您单击一个,您可以看到 index.html 的链接。问题是 - 如果你点击 index.html,你会得到一个 404。我把它放在我的 Startup.Configure 中:

           var rootPath = Path.GetFullPath(".");
           var acmeChallengePath =
               Path.Combine(rootPath, @".well-known\acme-challenge");

           app.UseDirectoryBrowser(new DirectoryBrowserOptions
           {
               FileProvider = new PhysicalFileProvider(acmeChallengePath),
               RequestPath = new PathString("/.well-known/acme-challenge"),
           });

           app.UseStaticFiles(new StaticFileOptions
           {
               ServeUnknownFileTypes = true
           });

(我不认为我需要 ServeUnknownFileTypes,因为我的文件是 index.html,而不是博客文章中的长随机字符串,但我认为这也不会伤害任何东西。)

我认为问题可能是该文件不包含有效的 html(只是一串字符),但是我放置了另一个确实包含有效 html 的文件,并且在单击该文件时也得到了 404。

我是否缺少其他一些 ASP.Net Core(或 Azure App Service)细节来使应用程序提供 index.html 文件?

标签: asp.net-coreazure-web-app-servicelets-encrypt

解决方案


我想通了这一点,并发布了答案,希望能防止其他人犯同样的错误。这个问题根本不是我想的那样,而是 - ASP.Net Core Azure App Service 托管环境中有两个“wwwroot”文件夹,我没有给予足够的关注。

Azure 托管应用程序的文件系统路径是 D:\home\site\wwwroot。在“经典”ASP.Net 场景中,您的静态文件位于该文件夹中。在 ASP.Net Core 场景中,另一个 wwwroot 文件夹会在该文件夹下创建。我的脚本(为 ASP.Net 编写)在第一个脚本下创建了“.well-known\acme-challenge”文件夹。该标准app.UseStaticFiles()对这些没有帮助。

基本上,我有:

-家

- 地点

---wwwroot(托管根)

----wwwroot(ASP.Net核心静态文件夹)

----.well-known(这是第二个 wwwroot 的兄弟姐妹,需要成为孩子)

我需要更改我的脚本以将我的静态文件放在第二个 wwwroot 下,以便app.UseStaticFiles()为这些文件提供服务。


推荐阅读