Я размещаю веб-API ASP.NET Core 2.1 и веб-приложение в Kestrel на одном и том же порту (используя HTTPS, но не на порту 443). Я не могу изменить свой назначенный номер порта.
Web API может принимать самозаверяющий сертификат клиента в качестве одной из форм аутентификации (вместо учетных данных пользователя). К сожалению, при попытке доступа к странице входа из браузера (Firefox, IE, Edge, Chrome) браузер предложит пользователю выбрать сертификат клиента. Однако я не пытаюсь выполнить взаимную аутентификацию; и я не хочу пытаться добавить самоподписанный сертификат в список доверия сертификатов (CTL).
Я видел примеры, когда для роли можно определить политику, а затем для роли может потребоваться сертификат, однако он не работает: браузер по-прежнему запрашивает сертификат у пользователя.
var webHostBuilder = new WebHostBuilder()
.UseSerilog()
.UseKestrel(options => {
options.Listen(IPAddress.Any, port, listenOptions => {
var httpsConnectionAdapterOptions = new HttpsConnectionAdapterOptions {
// This line is required to allow a Client Certificate to be provided
// for authentication with the Web API. However, it also makes
// browsers prompt for a certificate.
ClientCertificateMode = ClientCertificateMode.AllowCertificate,
SslProtocols = System.Security.Authentication.SslProtocols.Tls12,
ServerCertificate = GetCertificate()
};
listenOptions.UseHttps(httpsConnectionAdapterOptions);
});
При использовании веб-приложения я бы хотел, чтобы браузеры не предлагали пользователям выбирать сертификат. Однако браузеры предлагают пользователям выбрать сертификат.