我在本地 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 错误以便它可以访问证书?
我在使用 CLEAN 架构(CQRS 模式)实现的 .NetCore Web API (.NetCore 5.0) 上遇到了类似的问题,我需要 2 个证书来运行我的应用程序。
因此,在应用程序设置生产 JSON 中,我们需要指向自签名证书,而在 IIS 中的应用程序中发布时,我们需要从“编辑绑定”屏幕的 SSL 证书下拉列表中选择 CA 颁发的证书。
第1点:将CA颁发的证书导入到IIS中。 第 2 点:虽然自签名应出现在 MMC、个人或根或 Web 托管中,但在本地计算机或当前用户中,同样应在应用程序设置生产 JSON 中引用。
我可以提供一些答案,因为最近我也遇到了同样的问题。答案是基于多个来源,但我会给出一步一步的解决方案,我认为应该专门解决 IIS 服务器和 Duende Identity Server 的问题。
首先,创建您正确编写的自签名证书很重要,但我使用 LocalMachine 还将“您的域”替换为本地主机的域,以便使用“localhost”域。
New-SelfSignedCertificate -DnsName "Your Domain" -CertStoreLocation "cert:\LocalMachine\My" -FriendlyName "test-certificate"
确保您的 appSettings 文件包含这些信息
"IdentityServer": {
"Clients": {
"YourClientName": {
"Profile": "IdentityServerSPA"
}
},
"Key": {
"Type": "Store",
"StoreName": "My",
"StoreLocation": "LocalMachine",
"Name": "CN=Your Domain"
}
}
分配“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
。
现在使用 私钥和扩展属性导出您的证书。
现在在 IIS 服务器中导入相同的证书,并为您的 https 绑定附加导入的证书。
通过这些步骤,我能够解决这个问题。我希望它可以帮助某人并为其他人节省很多时间。
有用请点赞