【问题标题】:How to provide https for a domain in ASP .NET Core?如何在 ASP .NET Core 中为域提供 https?
【发布时间】:2020-07-10 09:15:03
【问题描述】:

我一直在尝试将 https 添加到绑定到域的网站。因此,我尝试 certbot 生成 我的证书。我已经在用 js 编写的模拟服务器上测试了这些证书。在那里,我所要做的就是为 Express 服务器提供特定的选项,如下所示:

var options = {
   key: fs.readFileSync('privkey.pem'),
   cert: fs.readFileSync('fullchain.pem')
};

噗,我的浏览器的链接选项卡上出现了一个锁,说我的网站是安全的。现在我想把它移到 ASP.NET Core,所以我找到了 kestrel 选项,我可以在其中提供我的证书:

Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{  
    webBuilder.UseStartup<Startup>();
    webBuilder.ConfigureKestrel(o =>
    {
        o.ConfigureHttpsDefaults(ohttps =>
        {
            ohttps.ClientCertificateMode = Microsoft.AspNetCore.Server.Kestrel.Https.ClientCertificateMode.RequireCertificate;
            ohttps.ServerCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(...);
        });
    });
});

但是,我似乎只需要提供 X509 证书,这是一个公共证书。服务器不需要私有证书来提供安全连接吗?我必须使用私人证书吗?如何在 ASP.NET Core 中实现它? (3.1)

【问题讨论】:

标签: c# .net asp.net-core https


【解决方案1】:

我正在使用 .UseKestrel 配置 Kestrel HTTPS 选项。但也可以在 .ConfigureKestrel 方法中设置选项。

在示例中,我从 Windows 服务器证书存储加载证书。

但也有UseHttps(ListenOptions, String, String) 的重载,它接受文件名和密码。 (see the docs )

new WebHostBuilder()
.UseKestrel(opt =>
{
        int port = endpointConfig.Port;
        opt.Listen(IPAddress.IPv6Any, port, listenOptions =>
        {
            listenOptions.UseHttps(GetCertificateFromStore(certThumbprint, certStore));
        });
})
.ConfigureServices(
    services => services
        .AddSingleton<StatelessServiceContext>(serviceContext))
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build();

【讨论】:

    【解决方案2】:

    感谢johnmoarr's 的回答和this answer 我能够解决这个问题。 .UseHttps()方法提供的密钥必须是公钥和私钥配对,可以通过openssl生成:

    openssl pkcs12 -export -out key.pfx -inkey privkey.pem -in fullchain.pem
    

    然后,生成的文件 key.pfx 可以在 kestrel builder 方法中使用,以及证书导出中提供的密码:

    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
            .UseStartup<Startup>()
            .UseKestrel(o =>
            {
                o.Listen(IPAddress.Any, 443, opt =>
                {
                     opt.UseHttps("YOUR_PATH/key.pfx", "YOUR_EXPORT_PASSWORD");
                });
            });
        });
    

    此外,您甚至可以在本地计算机上对其进行测试,将您的 LAN IP 和域名放入 hosts 文件中。

    【讨论】:

      猜你喜欢
      • 2018-02-05
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-11
      • 1970-01-01
      • 2016-10-21
      • 2023-03-26
      相关资源
      最近更新 更多