Load certificate to use HTTPs

This commit is contained in:
2025-07-20 16:51:47 +08:00
parent f499e7d31a
commit 4557631153
7 changed files with 31 additions and 44 deletions

View File

@@ -1,13 +1,16 @@
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Server.Kestrel.Core;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
namespace DysonNetwork.Shared.Http;
public static class KestrelConfiguration
{
public static WebApplicationBuilder ConfigureAppKestrel(this WebApplicationBuilder builder)
public static WebApplicationBuilder ConfigureAppKestrel(this WebApplicationBuilder builder, IConfiguration configuration)
{
builder.Host.UseContentRoot(Directory.GetCurrentDirectory());
builder.WebHost.ConfigureKestrel(options =>
@@ -15,12 +18,28 @@ public static class KestrelConfiguration
options.Limits.MaxRequestBodySize = 50 * 1024 * 1024;
options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(2);
options.Limits.RequestHeadersTimeout = TimeSpan.FromSeconds(30);
options.ConfigureEndpointDefaults(endpoints =>
{
endpoints.Protocols = HttpProtocols.Http1AndHttp2;
});
});
var certPath = configuration["Service:ClientCert"]!;
var keyPath = configuration["Service:ClientKey"]!;
// Load PEM cert and key manually
var certificate = X509Certificate2.CreateFromPemFile(certPath, keyPath);
// You MUST call this to make sure the key is usable
certificate = certificate.CopyWithPrivateKey(
RSA.Create()
);
// Now pass the full cert
options.ListenAnyIP(5001, listenOptions =>
{
listenOptions.UseHttps(certificate);
});
// Optional: HTTP fallback
options.ListenAnyIP(8080);
});
return builder;
}
}