@Lisik

Как использовать собственный SSL сертификат через kestrel?

Здравствуйте! Я только начал изучать ASP.NET и начал с создания самого простого веб-сервера с использованием аутентификации с помощью SSL сертификатов. Насколько я понял из обучающих статей, задание сертификата идет через kestrel, что я явно и делаю в коде. Перед этим я заранее сгенерировал 2 сертификата через power shell : root и child.
root
New-SelfSignedCertificate -DnsName "localhost", "localhost" -CertStoreLocation "cert:\LocalMachine\My" -NotAfter (Get-Date).AddYears(20) -FriendlyName "Rlocalhost" -KeyUsageProperty All -KeyUsage CertSign, CRLSign, DigitalSignature

child
$rootcert = ( Get-ChildItem -Path cert:\LocalMachine\My\"ca thumbprint" )

New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname "localhost" -Signer $rootcert -NotAfter (Get-Date).AddYears(20) -FriendlyName "Clocalhost"

Но вот возникает проблема: при запуске сервера, оный использует сертификат, который Visual Studio генерирует по умолчанию. Подскажите, как сделать так, чтобы сервер запускался с использованием мной сгенерированных сертификатов?
public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);
            var certificate = store.Certificates.OfType<X509Certificate2>()
                .First(c => c.FriendlyName == "Rlocalhost");

            return Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseKestrel(options =>
                    {
                        options.Listen(System.Net.IPAddress.Loopback, 7043, listenOptions =>
                        {
                            var connectionOptions = new HttpsConnectionAdapterOptions();
                            connectionOptions.ServerCertificate = certificate;
                            listenOptions.UseHttps(connectionOptions);

                            var builder = WebApplication.CreateBuilder(args);
                            var app = builder.Build();
                            app.MapGet("/", () => "Hello World!");
                            app.Run();
                        });
                    });
                });
        }
    }
  • Вопрос задан
  • 216 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы