Установите 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.

Другие вопросы по тегам