[英]Let's Encrypt with ASP.Net Core and Azure App Service
我在 Azure 中有一本运行手册,它使用 AcmeSharp 为在 Azure 应用服务中运行的网站生成 Let's Encrypt 证书。 我已经在许多 ASP.Net 网站上成功使用过它很多次。 显然,到目前为止,我从未在 ASP.Net Core (2.2) 站点上尝试过它。
我很确定我遇到了这篇博文中描述的问题 - https://ronaldwildenberg.com/letsencrypt-for-asp-net-core-on-azure 。 基本上,该脚本在我的站点中将 static 文件发布到 /.wellknown/acme-challenge/randomstring/index.html ,然后 Let's Encrypt 尝试验证该文件。 我在尝试点击这个 URL 时得到 404,即使我可以在 Kudu 的文件系统中看到它。
我觉得这是 ASP.Net Core 中的 static 文件问题,当我找到上面提到的博客文章时 - 我认为这将是答案。 我按照文章中的说明更改了我的代码,但我仍然得到 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 应用服务)细节来使应用程序提供 index.html 文件?
我想通了这一点,并发布了答案,希望能防止其他人犯同样的错误。 这个问题根本不是我想的那样,而是 - ASP.Net Core Azure App Service 托管环境中有两个“wwwroot”文件夹,我没有给予足够的关注。
Azure 托管您的应用程序的文件系统路径是 D:\home\site\wwwroot。 在“经典” ASP.Net 方案中,您的 static 文件 go 在该文件夹中。 在 ASP.Net Core 场景中,另一个 wwwroot 文件夹会在该文件夹下创建。 我的脚本(为 ASP.Net 编写)在第一个脚本下创建了“.well-known\acme-challenge”文件夹。 标准的app.UseStaticFiles()
对这些没有帮助。
基本上,我有:
-家
- 地点
---wwwroot(托管根)
----wwwroot(ASP.Net core static文件夹)
----.well-known(这是第二个 wwwroot 的兄弟姐妹,需要成为孩子)
我需要更改我的脚本,将我的 static 文件放在第二个 wwwroot 下,以便app.UseStaticFiles()
为这些文件提供服务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.