Blazor 和自定义证书

Blazor & Custom Certificates

我正在研究使用 Blazor WASM 构建零售应用程序的想法,该应用程序将 运行 在办公室 Intranet 上。该应用程序将安装在给定的机器上,可以从 LAN 上的多台机器中的任意一台通过浏览器访问。

我遇到的最大障碍 运行 是如何保护频道的问题。

该应用程序本身将 运行 作为 Windows 服务,侦听其中一个工作站上的端口 443,例如https://接待处/。但是我们如何告诉 Blazor 为该主机名使用自签名 TLS 证书?

如果有更好的方法来解决这个问题,我会洗耳恭听。我不能使用 Let's Encrypt 证书,因为应用程序及其主机名都不会暴露给 public Internet。

关于使用 Blazor 构建此类应用程序的信息过多,但大多数(如果不是全部)演示 运行 在本地主机上。这适用于开发,但不适用于生产(无论如何在自托管场景中)。这方面的事情似乎没有太多讨论。

我们如何为从客户端到 Blazor WASM 应用程序的浏览器请求使用自定义证书?

有什么想法吗?

处理 SSL 的最简单方法是使用 IIS 作为 Blazor 应用程序的代理。

IIS 可让您轻松访问记录在案的 SSL 设置。

https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#standalone-deployment

我能够使用来自 official documentation:

的一些稍微修改过的示例代码来实现这一点
builder.WebHost.ConfigureKestrel(serverOptions =>
{
  serverOptions.ListenAnyIP(443, listenOptions =>
  {
    listenOptions.UseHttps(httpsOptions =>
    {
      var testCert = CertificateLoader.LoadFromStoreCert(
          "test", "My", StoreLocation.CurrentUser,
          allowInvalid: true);

      var certs = new Dictionary<string, X509Certificate2>(
          StringComparer.OrdinalIgnoreCase)
      {
        ["test"] = testCert
      };

      httpsOptions.ServerCertificateSelector = (connectionContext, name) =>
      {
        if (name is not null && certs.TryGetValue(name, out var cert))
        {
          return cert;
        }

        return testCert;
      };
    });
  });
});