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

Always Encrypted Certificate for Network Service or AppPool Accounts

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

在 Windows 服务器上,当应用程序在网络服务或应用程序池标识下 运行 时,我们得到的是 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

到目前为止,没有任何效果(除了 运行 以管理员身份运行该应用程序),我们不知道接下来要尝试什么。我们对某种 "Microsoft Official Deployment Guide" 进行了高低评价,但所有内容都是关于如何在本地开发环境中使用 Always Encrypted 的教程,与服务器部署无关。

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

一旦我暂时将我的 table 字段重置为纯文本,删除主密钥和加密密钥并在我的 PC 上的 Local Machine 下重新生成它们,然后导出证书,它安装到本地 Machine/Personal 存储区就好了,我所要做的就是使用 "Manage Private Key" 授予 IIS_IUSRS 权限以清除剩余的 "Keyset does not exist" 错误。希望这可以为其他人节省一天的谷歌搜索时间。