Использование сертификата формата PEM в .net Core 3.1 на сервере Ubuntu

#c# #asp.net-core #ssl #kestrel-http-server

#c# #asp.net-core #ssl #kestrel-http-сервер

Вопрос:

все, я прочитал эту проблему и обнаружил, что в .net core 3.x есть поддержка сертификата формата PEM. Я пытаюсь использовать это, но у меня не получается. Я не могу найти ни одного примера кода о том, как это использовать. у меня есть что-то вроде этого:

         public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                webBuilder.UseUrls("http://0.0.0.0:8678/");//It works now and this is without https
                webBuilder.UseKestrel(options =>
                {
                      //TODO:

                    
                });
            });
  

В TODO: Я знаю, что у нас должно быть что-то вроде этого:

 options.Listen(IPAddress.Loopback, 8678); 
                    options.Listen(IPAddress.Any, 8678); 
                    options.Listen(IPAddress.Loopback, 443,
                        listenOptions => { listenOptions.UseHttps("certificate.pfx", "password"); });
  

итак, что мы должны поместить вместо "certificate.pfx", "password" ? Я действительно ценю любую помощь в этом.
Путь к моему сертификату на компьютере Ubunto является:

 /etc/letsencrypt/app/fullchain.pem
  

Комментарии:

1. Вы говорите, что у вас не получилось, но что именно это значит? Какую ошибку, если таковая имеется, вы получаете. Если это не ошибка, то какое поведение вы видите? Откуда вы знаете, что у вас не получилось?

2. У нас нет тестовой среды, и мы должны запускать время простоя, близкое к нулю. Итак, я вижу, что метод UseHttps получает формат certificate.pfx с паролем, я не уверен, как использовать формат PEM с этим методом.

3. Вы должны иметь возможность тестировать на своем компьютере разработчика? Вы пробовали просто указать PEM и пароль ключа?

4. да, вы правы. Я могу установить ubuntu с помощью virtual box, сохранить сертификат и протестировать локально с помощью kestrel. но я думаю, что должны быть некоторые изменения. поскольку PEM — это файлы ASCII в кодировке Base64, но формат PFX является двоичным форматом, поэтому я подумал, что, возможно, я ошибаюсь в этом методе. Спасибо за ваше предложение.

5. pfx — это контейнер для 1 или более открытых ключей и закрытого ключа. Вы можете использовать openssl для объединения ваших сертификатов и закрытых ключей в 1 файл. Лучше всего добавить пароль, потому что некоторым системам не нравятся файлы pfx без пароля, а также потому, что он содержит ваши личные ключи

Ответ №1:

Поддержка PEM добавляется в .NET 5, согласно этому.

Способ сделать это — добавить appsettings.json одну из следующих конфигураций:

   "Certificates":{
    "Default":{
      "Path": "/some/asp.pem",
      "KeyPath": "/some/asp.key",
      "Password": "password"
    }
  }

  "Certificates":{
    "Default":{
      "Path": "/some/asp.pem",
      "KeyPath": "/some/asp.key",
    }
  }

  "Certificates":{
    "Default":{
      "Path": "/some/asp.crt",
      "KeyPath": "/some/asp.key",
    }
  }
  

Кроме того, в этом PR все еще разрабатывается поддержка загрузки цепочек сертификатов из конфигурации, и она может быть добавлена в NET5 RC2.
В соответствии с упомянутым PR вам необходимо указать ChainPath в файле конфигурации.

Комментарии:

1. Спасибо за ваш ответ, но, как я уже упоминал, я использую .net core 3.1, я думаю, что это связано с .net Framework.

2. В .Net Core 3.x нет поддержки сертификатов PEM. Вы либо обновляетесь до .NET5, либо продолжаете использовать .Net Core 3.1, но с сертификатами PFX.

3. но они объявили, что у них есть эта поддержка, основанная на этой ссылке: github.com/dotnet/aspnetcore/issues/21512

4. Как я уже сказал, поддержка добавляется в .Net 5, вы также можете увидеть, с какими тегами связана проблема, на которую вы ссылались: davidfowl added this to the 5.0.0 milestone on May 5