本地IIS部署含Identity Server的ASP.NET Angular项目无法访问证书如何解决
问题原因
你本地调试或文件夹发布后直接运行时,程序使用你当前登录的Windows用户身份执行,可正常访问CurrentUser\My路径下的证书存储。但IIS中的网站默认使用对应应用程序池的内置服务账号运行,该账号既无法访问你的个人用户证书存储,也没有证书私钥的读取权限,因此抛出找不到证书的异常。
解决方案
方案1(推荐):将证书安装到本地计算机存储区
- 重新创建自签名证书到本地计算机存储,执行以下PowerShell命令(需要管理员权限):
New-SelfSignedCertificate -DnsName "my-subdomain.azurewebsites.net" -CertStoreLocation "cert:\LocalMachine\My" - 修改
appsettings.json中的IdentityServer配置,调整存储位置为本地计算机:
"IdentityServer": { "Key": { "Type": "Store", "StoreName": "My", "StoreLocation": "LocalMachine", "Name": "CN=my-subdomain.azurewebsites.net" }, "Clients": { "MarketPlace": { "Profile": "IdentityServerSPA" } } }
- 为IIS应用程序池账号分配证书私钥读取权限:
- 按下
Win+R输入certlm.msc,打开本地计算机证书管理器 - 依次展开「个人」→「证书」,找到主题为
my-subdomain.azurewebsites.net的证书 - 右键点击证书,选择「所有任务」→「管理私钥」
- 点击「添加」,在对象名称输入框中填入
IIS AppPool\你的应用程序池名称(替换为你网站对应的实际应用池名称),点击「检查名称」确认无误后保存 - 在权限列表中为刚添加的账号勾选「读取」权限,确认保存
- 按下
- 重启IIS对应应用池和网站即可正常访问
方案2:修改应用程序池运行身份为当前用户
如果你不想改动证书存储位置,可以直接调整IIS应用池的运行账号:
- 打开IIS管理器,找到对应网站的应用程序池,右键选择「高级设置」
- 找到「进程模型」→「标识」,点击右侧的设置按钮
- 选择「自定义账户」,点击「设置」,输入你当前登录的Windows账号的用户名和密码,确认保存
- 重启应用程序池和网站即可
注意事项
- 确认证书在有效期范围内,自签名证书默认有效期为1年
- 确认配置中的证书主题名称和证书实际主题完全一致,无多余空格或拼写错误
内容的提问来源于stack exchange,提问作者Huseyin
相关产品推荐
相关产品推荐

