IIS 找不到带有主题的有效证书

问题描述 投票:0回答:2

我在本地 IIS 服务器上使用 Identity Server 选项部署 ASP.NET Angular SPA 模板 RC2 应用程序。我得到以下异常。 IIS 无法访问我的本地认证信息。

Application: w3wp.exe
CoreCLR Version: 6.0.21.52210
.NET Version: 6.0.0
Description: The process was terminated due to an unhandled exception.
Exception Info: System.InvalidOperationException: Couldn't find a valid certificate with subject 'CN=my-subdomain.azurewebsites.net' on the 'CurrentUser\My'
   at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.SigningKeysLoader.LoadFromStoreCert(String subject, String storeName, StoreLocation storeLocation, DateTimeOffset currentTime)
   at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.LoadKey()
   at Microsoft.AspNetCore.ApiAuthorization.IdentityServer.ConfigureSigningCredentials.Configure(ApiAuthorizationOptions options)
   at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
   at Microsoft.Extensions.Options.UnnamedOptionsManager`1.get_Value()
   at Microsoft.Extensions.DependencyInjection.IdentityServerBuilderConfigurationExtensions.<>c.<AddClients>b__8_1(IServiceProvider sp)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSiteMain(ServiceCallSite callSite, TArgument argument)

我通过

创建了证书
New-SelfSignedCertificate -DnsName "my-subdomain.azurewebsites.net" -CertStoreLocation "cert:\CurrentUser\My"

我将 appsettings.json 设置为

  "IdentityServer": {
    "Key": {
      "Type": "Store",
      "StoreName": "My",
      "StoreLocation": "CurrentUser",
      "Name": "CN=my-subdomain.azurewebsites.net"
    },
    "Clients": {
      "MarketPlace": {
        "Profile": "IdentityServerSPA"
      }
    }

当我使用与文件夹发布相同的配置发布此站点时,它可以正常工作。如何修复 IIS 错误以便它可以访问证书?

asp.net angular iis duende-identity-server
2个回答
0
投票

我在使用 CLEAN 架构(CQRS 模式)实现的 .NetCore Web API (.NetCore 5.0) 上遇到了类似的问题,我需要 2 个证书来运行我的应用程序。

  1. CA为应用级别范围之外的外部通信颁发证书
  2. 自签名用于应用程序级别内的通信,例如与其他服务/类库服务或可能与数据库的通信。 (对于内部通信,应用程序将查找在域级别或服务器级别创建的证书)

因此,在应用程序设置生产 JSON 中,我们需要指向自签名证书,而在 IIS 中的应用程序中发布时,我们需要从“编辑绑定”屏幕的 SSL 证书下拉列表中选择 CA 颁发的证书。

第1点:将CA颁发的证书导入到IIS中。 第 2 点:虽然自签名应出现在 MMC、个人或根或 Web 托管中,但在本地计算机或当前用户中,同样应在应用程序设置生产 JSON 中引用。

干净的架构: https://github.com/jasontaylordev/CleanArchitecture


0
投票

我可以提供一些答案,因为最近我也遇到了同样的问题。答案是基于多个来源,但我会给出一步一步的解决方案,我认为应该专门解决 IIS 服务器和 Duende Identity Server 的问题。

  1. 首先,创建您正确编写的自签名证书很重要,但我使用 LocalMachine 还将“您的域”替换为本地主机的域,以便使用“localhost”域。

    New-SelfSignedCertificate -DnsName "Your Domain" -CertStoreLocation "cert:\LocalMachine\My" -FriendlyName "test-certificate"

  2. 确保您的 appSettings 文件包含这些信息

      "IdentityServer": {
        "Clients": {
          "YourClientName": {
            "Profile": "IdentityServerSPA"
          }
        },
        "Key": {
          "Type": "Store",
          "StoreName": "My",
          "StoreLocation": "LocalMachine",
          "Name": "CN=Your Domain"
        }
    

    }

  3. 分配“IIS_IUSRS”和“网络服务”用户来访问私钥非常重要。 为此,请转到“mmc”控制台

    file -> Add/Remove snap in -> choose certificate -> choose local machine/computer -> find your certificate(generated one) -> right click -> manage certificate -> All task -> Add "IIS_IUSRS" and "Network Service" and give Read and Full Control permission

  4. 现在使用 私钥和扩展属性导出您的证书。

  5. 现在在 IIS 服务器中导入相同的证书,并为您的 https 绑定附加导入的证书

通过这些步骤,我能够解决这个问题。我希望它可以帮助某人并为其他人节省很多时间。

有用请点赞

© www.soinside.com 2019 - 2024. All rights reserved.