网络服务或 AppPool 帐户的始终加密证书

Fir*_*ion 0 sql-server iis sql-server-2016 always-encrypted

我正在尝试将 Always Encrypted 应用程序部署到 Amazon AWS。有一个 2016 RDS 数据库和一个托管 ASP.NET 4.6 应用程序的 Windows Server 2016。

在 Windows Server 上,当应用程序在网络服务或应用程序池标识下运行时,我们得到的正是我非常确定的问题

我们的错误:

System.Data.SqlClient.SqlException (0x80131904): Execution Timeout Expired. The timeout period elapsed prior to completion of the operation or the server is not responding. ---> System.ComponentModel.Win32Exception (0x80004005): The wait operation timed out

  • 我们尝试了该帖子中的解决方案,但没有成功
  • 我们尝试了这篇文章中的解决方案,但无法让 powershell 脚本返回除运行时异常之外的任何内容。我对 powershell 不太熟悉,所以也许我不明白这个脚本。
  • 如果我们将证书导入到管理员帐户,并使用管理员帐户运行 IIS 应用程序池,则一切正常(不是连接问题或任何问题)
  • 我们尝试将证书导入本地计算机“个人”证书,并赋予应用程序帐户对密钥的完全控制权
  • 我们尝试将证书导入到本地计算机受信任的根证书颁发机构(如 as/o post 中的建议)。
  • 我们尝试为 DefaultAppPool 和 Network Service 帐户使用“runas”运行 certmgr,但是当提示输入密码时,我们不知道密码是什么(空白密码不起作用)。我什至按照此处的建议查找了 DefaultAppPool 密码,根据该输出,密码为空。

到目前为止,没有任何效果(除了以管理员身份运行应用程序之外),我们不知道下一步该尝试什么。我们到处寻找某种“微软官方部署指南”,但所有这些都是关于如何在本地开发环境中使始终加密工作的教程,而不是关于服务器部署。

小智 5

当您最初为 SQL 数据库创建始终加密密钥时,您是在当前用户证书存储还是本地计算机证书存储中生成它们?事实证明,将它们放在Local Machine下确实很重要。当我尝试将 Web 应用程序部署到我们的 Web 服务器时,这就是我遇到的问题。无论我在服务器上的何处安装证书,SQL 仍在当前用户下查找它,IIS 无法看到该证书,并且该存储不会出现“管理私钥”,因此您无法为其分配 IIS 用户帐户(至少我不能) 't)。

一旦我将表字段暂时重置为纯文本,删除主密钥和加密密钥并在我的 PC 上的本地计算机下重新生成它们,并导出证书,它就可以很好地安装到本地计算机/个人存储中,我所要做的就是所做的事情是使用“管理私钥”授予 IIS_IUSRS 权限,以清除剩余的“密钥集不存在”错误。希望这可以帮助其他人节省一天的谷歌搜索时间。