Может кто-нибудь объяснить, почему следующий сертификат работает только с aspnetcore, если он «экспортирован» и «восстановлен»?
Пожалуйста, посмотрите на строку возврата CreateSelfSignedServerCertificate , что я имею в виду с экспортом и восстановлением.
Если отключить возвращаемое значение функции CreateSelfSignedServerCertificate в строку «без экспорта» при доступе к любому https-uri с сервера выкидывает
В пакете безопасности нет учетных данных
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
namespace WebApplication1
{
public class Program
{
public static void Main(string[] args)
{
X509Certificate2 cert = CreateSelfSignedServerCertificate();
var builder = Host.CreateDefaultBuilder(args);
IHost host = builder
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel(o =>
{
o.ListenAnyIP(5555, o2 =>
{
o2.UseHttps(cert);
});
});
})
.Build();
host.Run();
}
static X509Certificate2 CreateSelfSignedServerCertificate()
{
SubjectAlternativeNameBuilder sanBuilder = new SubjectAlternativeNameBuilder();
sanBuilder.AddIpAddress(IPAddress.Any);
sanBuilder.AddIpAddress(IPAddress.Loopback);
sanBuilder.AddIpAddress(IPAddress.IPv6Loopback);
var addresses = Dns.GetHostEntry(Dns.GetHostName()).AddressList.Where(t => t.AddressFamily == AddressFamily.InterNetwork).ToList();
addresses.ForEach(t => sanBuilder.AddIpAddress(t));
sanBuilder.AddDnsName("localhost");
sanBuilder.AddDnsName(Environment.MachineName);
X500DistinguishedName distinguishedName = new X500DistinguishedName($"CN=localhost");
RSA rsa = RSA.Create(2048);
{
CertificateRequest request = new CertificateRequest(distinguishedName, rsa, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
request.CertificateExtensions.Add(
new X509KeyUsageExtension(
X509KeyUsageFlags.DataEncipherment
| X509KeyUsageFlags.KeyEncipherment
| X509KeyUsageFlags.DigitalSignature, false));
request.CertificateExtensions.Add(
new X509EnhancedKeyUsageExtension(
new OidCollection { new Oid("1.3.6.1.5.5.7.3.1") }, false));
request.CertificateExtensions.Add(sanBuilder.Build());
X509Certificate2 certificate = request.CreateSelfSigned(
new DateTimeOffset(DateTime.UtcNow.AddDays(-1)), new DateTimeOffset(DateTime.UtcNow.AddYears(30)));
certificate.FriendlyName = "localhost";
return new X509Certificate2(certificate.Export(X509ContentType.Pfx)); // exporting cert works with aspnetcore
//return certificate; // non exported cert doesn't work with aspnetcore
}
}
}
}