Давайте зашифруем с помощью ASP.Net Core и службы приложений Azure - PullRequest
0 голосов
/ 23 октября 2019

У меня есть Runbook в Azure, который использует AcmeSharp для создания сертификатов Let's Encrypt для веб-сайта, работающего в службах приложений Azure. Я использовал его много раз успешно на многих сайтах 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 пытается проверить этот файл. Я получаю 404 при попытке попасть по этому URL, хотя я вижу его в файловой системе в Куду.

Я чувствовал, что это проблема статического файла в 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 (или служба приложений Azure)подробно мне не хватает, чтобы приложение обслуживало файлы index.html?

1 Ответ

0 голосов
/ 23 октября 2019

Я понял это и публикую ответ, чтобы, надеюсь, не дать кому-то другому совершить ту же ошибку, что и я. Проблема была вовсе не в том, что я думал, а в том, что в хостинговой среде ASP.Net Core Azure App Service есть две папки "wwwroot", и я не уделял достаточно внимания.

Путь к файловой системе, в которой Azure размещает ваше приложение, - D: \ home \ site \ wwwroot. В «классическом» сценарии ASP.Net ваши статические файлы помещаются в эту папку. В базовом сценарии ASP.Net под этой папкой создается другая папка wwwroot. Мой скрипт (написанный для ASP.Net) создавал папку «.well-known \ acme-challenge» под первой. Стандарт app.UseStaticFiles() не помогает с этим.

В основном у меня было:

-home

- site

--- wwwroot(хостинг root)

---- wwwroot (папка статических файлов ядра ASP.Net)

----. хорошо известна (это был брат 2-го wwwroot и он должен былбыть ребенком)

Мне нужно было изменить свой сценарий, чтобы поместить мои статические файлы под 2-й wwwroot, чтобы app.UseStaticFiles() служил этим файлам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...