У меня есть 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.
Заранее спасибо.