HTTPS ASP.NET .NET Core 2.2 API перестает отвечать на запросы после вызова Swagger UI - PullRequest
0 голосов
/ 08 мая 2019

У меня есть API .NET Core 2.2, размещенный в Kestrel с помощью Swagger.

API защищен доверенным сертификатом X.509, но тот, который заставляет Chrome сообщать "ERR_CERT_COMMON_NAME_INVALID" при переходе к API.

При вызове ~ / swagger из Chrome для вызова Swagger UI Chrome сообщает о неверном имени сертификата, и если я на этом остановлюсь, то с API все в порядке, но если я выберу «Дополнительно», а затем «Перейти к небезопасному», «API перестает отвечать на запросы и нуждается в перезапуске.

В журнале системных событий Windows сообщается о 4 ошибках Schannel при просмотре / swagger, о 6 других ошибках Schannel сообщается после выбора перехода в небезопасный режим.Все они - Событие 36887, "The following fatal alert was received: 46."

Вот как я настраиваю Kestrel при создании API:

HostedAPI = new WebHostBuilder()
            .UseUrls($"{uri}")
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseKestrel()
            .ConfigureKestrel(options =>
            {
                options.ConfigureHttpsDefaults(https =>
                {
                    https.ServerCertificate = certificate;
                    https.SslProtocols = sslProtocols;
                    https.ClientCertificateMode = ClientCertificateMode.NoCertificate;
                });
            })
            ...

Вот как я добавил Swagger в Startup.cs:

public const string SwaggerDocTitle = "My API";
public const string SwaggerDocVersion = "v1";

public void ConfigureServices(IServiceCollection services)
{
    services.AddSwaggerGen(setup =>
    {
        setup.SwaggerDoc(SwaggerDocVersion, new Info { Title = SwaggerDocTitle, Version = SwaggerDocVersion });
    });

    services.AddAuthentication(MyAuthenticationDefaults.AuthenticationSheme)
        .AddScheme<MyAuthenticationOptions, MyAuthenticationHandler>(MyAuthenticationDefaults.AuthenticationSheme, null);

    services.AddResponseCompression(options =>
    {
        options.EnableForHttps = true;
        options.MimeTypes = ResponseCompressionDefaults.MimeTypes;
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
    });

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseHsts();
    app.UseHttpsRedirection();
    app.UseMyTrafficFilter();
    app.UseSwagger();
    app.UseSwaggerUI(setup =>
    {
        setup.SwaggerEndpoint($"/swagger/{SwaggerDocVersion}/swagger.json", SwaggerDocTitle);
    });

    app.UseAuthentication();
    app.UseResponseCompression();
    app.UseMvc();
}

Журнал API довольно многословен, и до того, как я его отправлю, я надеюсь, что кто-то может либо объяснить, что происходит, либо указать мне правильное направление для диагностики этого.Я хотел бы выяснить это и сохранить Swagger, но я не могу, если он может сломать мой API.

Заранее спасибо.

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