小编zno*_*tny的帖子

具有不同 TLS 证书的多端点 Kestrel 配置提供错误的证书

我试图通过其appsettings.json配置文件在 Linux 环境中的基于 ASP.NET Core MVC 的服务应用程序中设置 Kestrel 服务器,以便它恰好有两个端点,都使用 HTTPS,但每个端点都具有不同的证书。一个端点监听0.0.0.0,另一个只监听localhost。该服务充当 IdentityServer4 的主机。服务器的预期运行时环境将是一个 Docker 容器,它是基于多服务的系统的一部分,目前作为 docker-compose 集群运行。

我已经研究了https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2#endpoint-configuration 上的官方文档,并认为它应该很容易实现。我创建了一个自签名根 CA 证书并生成了两个由根签名的证书。其中之一将 Common Name 设置为容器在集群中的名称,用于与外部环境的安全通信。另一个证书将 CN 设置为localhost并使用,因为服务器有多个可从外部使用的控制器,它们都将转换传入请求并转发到将处理它们的特殊内部控制器。(我意识到这对我来说有点偏执,但这无关紧要。)

我尝试配置 Kestrel,以便主端点使用默认证书,localhost端点使用临时证书,即像这样:

  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://+:2051"
      },
      "HttpsLocalhost": {
        "Url": "https://localhost:2052",
        "Certificate:": {
          "Path": "path/to/localhost-dev.pfx",
          "Password": "password"
        }
      }
    },
    "Certificates": {
      "Default": {
        "Path": "path/to/identity-api-dev.pfx",
        "Password": "password"
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

根据文档,这似乎是正确的配置,其中说如果明确配置 HTTPS,服务器需要定义默认证书。

外向控制器使用延迟初始化HttpClient,其BaseAddress属性在第一个接收到的请求上初始化,并带有localhost …

c# ssl kestrel-http-server asp.net-core

6
推荐指数
1
解决办法
1488
查看次数

标签 统计

asp.net-core ×1

c# ×1

kestrel-http-server ×1

ssl ×1