网络服务或 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
- 我们尝试了 post 中的解决方案,但没有奏效
- 我们尝试了 this post 中的解决方案,除了 运行 时间异常外,无法将 powershell 脚本用于 return 任何事情。我对 powershell 不是很熟悉,所以可能我看不懂脚本。
- 如果我们将证书导入到 Andministrator 帐户,并且 运行 使用管理员帐户的 IIS 应用程序池,那么一切正常(不是连接问题或任何问题)
- 我们尝试将证书导入本地计算机 "Personal" 证书并授予应用程序帐户对密钥的完全控制权
- 我们尝试将证书导入本地计算机受信任的根证书颁发机构(如 s/o post 某处所建议)。
- 我们为 DefaultAppPool 和网络服务帐户尝试了 运行ning certmgr 和 "runas",但是当提示输入密码时不知道密码是什么(空白密码不起作用)。我什至按照建议 here 查找了 DefaultAppPool 密码,根据该输出,密码为空。
到目前为止,没有任何效果(除了 运行 以管理员身份运行该应用程序),我们不知道接下来要尝试什么。我们对某种 "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" 错误。希望这可以为其他人节省一天的谷歌搜索时间。
我正在尝试将 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
- 我们尝试了 post 中的解决方案,但没有奏效
- 我们尝试了 this post 中的解决方案,除了 运行 时间异常外,无法将 powershell 脚本用于 return 任何事情。我对 powershell 不是很熟悉,所以可能我看不懂脚本。
- 如果我们将证书导入到 Andministrator 帐户,并且 运行 使用管理员帐户的 IIS 应用程序池,那么一切正常(不是连接问题或任何问题)
- 我们尝试将证书导入本地计算机 "Personal" 证书并授予应用程序帐户对密钥的完全控制权
- 我们尝试将证书导入本地计算机受信任的根证书颁发机构(如 s/o post 某处所建议)。
- 我们为 DefaultAppPool 和网络服务帐户尝试了 运行ning certmgr 和 "runas",但是当提示输入密码时不知道密码是什么(空白密码不起作用)。我什至按照建议 here 查找了 DefaultAppPool 密码,根据该输出,密码为空。
到目前为止,没有任何效果(除了 运行 以管理员身份运行该应用程序),我们不知道接下来要尝试什么。我们对某种 "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" 错误。希望这可以为其他人节省一天的谷歌搜索时间。