使用Asp.net与C#在Windows Server 2019读取个人证书返回空问题咨询
IIS部署后CurrentUser证书存储读取为空解决方案
根因说明
你编写的代码读取的是StoreLocation.CurrentUser(当前进程所属用户的个人证书存储):
- 本地开发时,调试进程用你的个人登录账号运行,读取的是你账号下安装的证书,所以能正常拿到34条记录
- 部署到IIS后,网站绑定的应用程序池默认使用独立的内置虚拟身份运行,和你登录服务器用的管理员账号不属于同一用户,因此读不到管理员账号下安装的证书
解决步骤
- 确认网站对应应用程序池的运行身份
打开IIS管理器 → 点击左侧【应用程序池】节点 → 找到你网站绑定的应用程序池 → 右键选择【高级设置】 → 查看【进程模型】分类下的【标识】参数值 - 匹配证书存储位置或调整运行身份
方案1(推荐,符合最小权限安全要求):- 打开Windows证书管理器,选择将证书安装到应用程序池对应运行身份的【个人】存储下
- 右键已安装的证书 → 点击【所有任务】→【管理私钥】→ 添加应用程序池的运行身份账号,给其授予【读取】权限
方案2(快速验证用):
在应用程序池高级设置中,将【标识】修改为你已确认安装了证书的管理员账号,修改后重启应用程序池即可
- 检查可选配置项
在应用程序池高级设置中,确认【进程模型】分类下的【加载用户配置文件】参数设置为True,该参数关闭时IIS不会加载对应用户的注册表和证书存储,也会导致读取结果为空
代码验证
你原有代码逻辑无需修改,配置调整完成后即可正常读取到证书:
using (X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) { store.Open(OpenFlags.ReadOnly); X509Certificate2Collection aCert = store.Certificates; // 此时aCert.Count即可拿到对应存储下的证书数量 }
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

