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

时间:2017-10-06 14:11:38

标签: sql-server iis sql-server-2016 always-encrypted

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

在Windows Server上,当应用程序在网络服务或应用程序池标识下运行时,我们得到了我非常确定的this exact problem

我们的错误:

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

  • 我们在该帖子中尝试了解决方案,但它没有工作
  • 我们在this post中尝试了解决方案,并且无法获得powershell脚本以返回除运行时异常之外的enything。我对powershell不太熟悉,所以也许我不了解剧本。
  • 如果我们将证书导入Andministrator帐户,并使用管理员帐户运行IIS应用程序池,那么一切正常(不是连接问题或任何其他问题)
  • 我们尝试将证书导入到本地计算机" Personal"证书并使应用程序帐户完全控制密钥
  • 我们尝试将证书导入到本地计算机受信任的根证书颁发机构(如某处的s / o帖子所示)。
  • 我们尝试使用" runas"运行certmgr。对于DefaultAppPool和Network Service帐户,但是当提示输入密码时,不知道那是什么(空白密码不起作用)。我甚至按照建议here查找了DefaultAppPool密码,并根据该输出密码为空。

到目前为止,除了作为管理员运行应用程序之外,没有任何工作,我们不知道接下来要尝试什么。对于某种类型的“Microsoft官方部署指南”而言,我们看起来很高和很低。但是所有这些都是关于如何让Always Encrypted在本地开发环境中工作的教程,没有关于服务器部署的信息。

1 个答案:

答案 0 :(得分:3)

当您最初为SQL数据库创建始终加密密钥时,是否在当前用户证书存储区或本地计算机证书存储区中生成它们?事实证明,将它们置于本地计算机之下非常重要。当我尝试将我的Web应用程序部署到我们的Web服务器时,这就是我的问题。无论我在服务器上安装证书的哪个位置,SQL仍然在当前用户下查找,IIS无法看到,并且此商店没有显示“管理私钥”,因此您无法为其分配IIS用户帐户(至少我不能。

我暂时将表格字段重置为纯文本,删除主密钥和加密密钥,然后在我的PC上的本地计算机下重新生成它们,并导出证书,将其安装到本地机器/个人商店就好了,我所要做的就是使用"管理私钥"给予IIS_IUSRS权限。清除剩余的" Keyset不存在"错误。希望这可以节省其他人一天的谷歌搜索。