Можно ли указать 2 разных сертификата SSL для одного экземпляра сервера Kestrel?
Я знаю, что есть метод "UseHttps" в классе "KestrelServerOptions", который принимает один сертификат, но можно ли указать более 1 сертификата SSL, чтобы иметь возможность работать с несколькими доменами и несколькими сертификатами в одном экземпляре Пустельга?
1 ответ
Это возможно, установив свойство ServerCertificateSelector при вызове UseHttps(). Селектор — это обратный вызов, который вы реализуете самостоятельно, и он снабжен строковым параметром, который указывает, какой хост DNS используется клиентом для связи с вашим сервером. Вы можете обработать этот параметр и вернуть соответствующий сертификат.
Взято из документации Майкрософт :
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(serverOptions =>
{
serverOptions.ListenAnyIP(5005, listenOptions =>
{
listenOptions.UseHttps(httpsOptions =>
{
var localhostCert = CertificateLoader.LoadFromStoreCert(
"localhost", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var exampleCert = CertificateLoader.LoadFromStoreCert(
"example.com", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var subExampleCert = CertificateLoader.LoadFromStoreCert(
"sub.example.com", "My", StoreLocation.CurrentUser,
allowInvalid: true);
var certs = new Dictionary<string, X509Certificate2>(
StringComparer.OrdinalIgnoreCase)
{
["localhost"] = localhostCert,
["example.com"] = exampleCert,
["sub.example.com"] = subExampleCert
};
httpsOptions.ServerCertificateSelector = (connectionContext, name) =>
{
if (name is not null && certs.TryGetValue(name, out var cert))
{
return cert;
}
return exampleCert;
};
});
});
});