#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