【问题标题】:Error ID1039: The certificate's private key could not be accessed even when app pool account has access to private key错误 ID1039:即使应用程序池帐户有权访问私钥,也无法访问证书的私钥
【发布时间】:2021-05-09 23:17:58
【问题描述】:

.pfx 证书安装到笔记本电脑上的“本地机器”存储中后,我在IIS Manager 中配置了一个ASP.NET 网站,以在其https 绑定中使用该证书。

网站使用的应用程序池被分配了一个可以访问证书的用户帐户。当我导航到该网站的主页时,我收到一个 500 错误页面。在 Windows Event Viewer 中,记录了以下内容...

错误:'ID1039:无法访问证书的私钥。 确保证书私钥上的访问控制列表 (ACL) 授予应用程序池用户访问权限

这让我抓狂,因为正如我之前提到的,应用程序池帐户已经拥有针对 Local Machine 商店中的证书授予的 Full ControlRead 权限。

我已经尝试过这个网页上提到的建议...

https://elybob.wordpress.com/2012/07/04/wif-error-id1039/

您授予 IIS_IUSRS 帐户 Read 对 MachineKeys 文件夹的权限,但这与我的情况没有什么不同。

我不知道如何在这里取得进展,所以任何建议都将不胜感激。

【问题讨论】:

  • 这个错误说明你的应用池没有访问证书私钥的权限,需要允许你的应用池访问证书私钥。这个博客也存在同样的问题,可以参考:ninjanichols.com/2012/10/…
  • @DingPeng 感谢您的评论。不幸的是,我已经三重检查了应用程序池用户确实有权访问
  • 原来,我在我的 ASP.NET 网站中获得了错误的证书来引用,哈哈。安装正确的证书后,该网站开始工作。我很高兴答案这么简单,否则我开始认为我遇到了一个非常边缘的问题,哈哈。

标签: asp.net iis certificate application-pool


【解决方案1】:

在 IIS 中,为了能够使用文件中的证书(证书 .pfx 文件),需要在应用程序池的高级设置中将“加载用户配置文件”设置为 True,以便能够通过文件名和密码加载证书。

选择 ASP .NET 应用程序的应用程序池 -> 右键单击​​ -> 高级设置 -> 将 Load User Profile 设置为 True

对于加密操作,Microsoft 算法可能不符合 FIPS,您可以通过在中设置安全策略以支持数字签名验证来覆盖它

管理工具 -> 工具 -> 本地安全策略 -> 本地策略 -> 安全选项 -> 系统加密:使用符合 FIPS 的算法 -> 禁用

更新:使用证书私钥可能还需要 IIS 应用程序池的权限:

运行 certlm.msc -> 选择证书 -> 所有任务 -> 管理私钥 -> 授予应用程序池权限

【讨论】:

  • 我检查了有问题的应用程序池的Load User Profile 设置,它设置为true
  • @Jason Evans,我已更新答案以添加步骤以授予 IIS AppPool 的私钥权限,请检查是否有帮助。
  • 优秀。值得为任何最终解决这个问题的人指出这一点。
最近更新 更多