Можно ли указать 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;
            };
        });
    });
});
Другие вопросы по тегам