Установите web.config для letsencrypt - сертифицируйте с помощью Asp.NET Core и Angular 2 (Javascript-сервисы)
Я пытаюсь установить сертификат https://letsencrypt.org/ с помощью Certify, но я получаю сообщение об ошибке, которое (я думаю) не имеет ничего общего с Certify. Проблема в том, как мой web.config настроен для работы с моим приложением Asp.Net Core - Angular2.
Я не настроил web.config, сервисы Javascript сделали. На веб-странице сертификации пишите внизу страницы о моей проблеме:
Я получаю сообщение об ошибке "Не удалось выполнить автоматическую проверку содержимого без расширений…". Это означает, что конфигурация вашего веб-сервера не позволяет пользователям без расширений обслуживать посетителей сайта. К сожалению, это требование службы Lets Encrypt, чтобы он мог получить файл подтверждения, который автоматически создается на вашем сайте при запросе сертификата (дополнительная информация).
Чтобы помочь с этим требованием, мы пытаемся автоматически настроить это для вас. Если вы загляните в {ваш сайт}.well-known\acme-challenge, вы увидите, что мы создали файл web.config и файл с именем configcheck. Если вы не можете просмотреть этот файл configcheck в своем веб-браузере (http://{ваш сайт}/. Хорошо известный /acme-challenge/configcheck, то служба Lets Encrypt также не сможет получить доступ к нужным файлам. Вы можете отредактировать файл web.config в этой папке, чтобы заставить работать файлы без расширений, затем вы можете повторно запросить свой сертификат. Запись mimeMap для "." или ".*" обычно работает в зависимости от версии вашей операционной системы.
Может, какой-нибудь эксперт, пожалуйста, помогите мне исправить мой файл web.config, который будет поддерживать все, что нужно letsencrypt. В настоящее время что-либо внутри.well-known/acme-challenge недоступно через WebBrowser.
Мой web.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
<rewrite>
<rules>
<rule name="redirect" stopProcessing="true">
<match url="^$" />
<action type="Rewrite" url="/index.html" />
</rule>
<rule name="Angular 2 pushState routing" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_FILENAME}" pattern=".*\.[\d\w]+$" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(.well-known)" negate="true"/>
<add input="{REQUEST_URI}" pattern="^/(signin)" negate="true" />
</conditions>
<action type="Rewrite" url="/index.html" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
4 ответа
Поместите это в .\.well-known\acme-challenge\Web.Config
файл рядом с файлами проверки Lets Encrypt DNS. Нет необходимости менять Web.Config
у тебя уже есть. Все, что он делает, это говорит IIS кашлять файлы без расширения в каталоге, где это Web.Config
проживает с типом пантомимы text/plain
так как Lets Encrypt ожидает этого.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="text/plain" />
</staticContent>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="GET" modules="StaticFileModule" resourceType="Either" />
</handlers>
</system.webServer>
</configuration>
У меня такая же проблема. В моем случае мне также пришлось добавить этот код в мой файл Startup.cs.
Также обязательно добавьте каталог.well-known. Это скрытая папка, поэтому используйте имя ".well-known". (конечная точка исчезнет). Windows не позволит новую скрытую папку без начальных и конечных точек.
using Microsoft.Extensions.FileProviders;
using System.IO;
using Microsoft.AspNetCore.Http;
public class Startup
{
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentDirectory(), @".well-known")),
RequestPath = new PathString("/.well-known"),
ServeUnknownFileTypes = true // serve extensionless files
});
}
}
В моем случае проблема была в том, что я забыл удалить App_Offline.htm при отправке запроса. После удаления проблема исчезла.
Проблема, с которой я столкнулся со стандартным web.config в папке acme-challenge, заключалась в том, что applicationhost.config содержал:
<section name="handlers" overrideModeDefault="Deny" />
Поэтому раздел обработчиков в файле acme-challenge web.config не был разрешен, в результате чего задача завершилась неудачно. В этом случае решения были следующими: Измените строку applicationhost.config на:
<section name="handlers" overrideModeDefault="Allow" />
Или... Удалите настройку обработчиков из файла web.config в папке acme-challenge.