【问题标题】:Always Encrypted Certificate for Network Service or AppPool Accounts网络服务或 AppPool 帐户的始终加密证书
【发布时间】:2017-10-06 14:11:38
【问题描述】:

我正在尝试将 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 脚本返回除运行时异常之外的任何内容。我对powershell不是很熟悉,所以可能我看不懂脚本。
  • 如果我们将证书导入到 Andministrator 帐户,并使用管理员帐户运行 IIS 应用程序池,那么一切正常(不是连接问题或任何问题)
  • 我们尝试将证书导入本地计算机的“个人”证书并让应用程序帐户完全控制密钥
  • 我们尝试将证书导入本地计算机受信任的根证书颁发机构(如某处的 s/o 帖子中所建议的那样)。
  • 我们尝试为 DefaultAppPool 和网络服务帐户运行带有“runas”的 certmgr,但是当提示输入密码时不知道那会是什么(空白密码不起作用)。我什至按照here 的建议查找了 DefaultAppPool 密码,根据该输出,密码为空。

到目前为止,没有任何工作(除了以管理员身份运行应用程序),我们不知道下一步该尝试什么。我们对某种“Microsoft 官方部署指南”进行了反复研究,但所有这些都是关于如何让 Always Encrypted 在本地开发环境中工作的教程,与服务器部署无关。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我们最终放弃了 Always Encrypted 并改用 AWS Encryption at Rest 功能,因为它仍然满足我们的要求。我记得虽然在不同的商店之间来回移动证书并认为这在某种程度上是相关的,所以我要说这可能是我正在寻找的答案。
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多