3

当我尝试将我的 asp.net mvc 应用程序发布到启用“始终加密”的本地 (pc) iis 时,我遇到了奇怪的问题。

当我尝试在本地 IIS(不是 express)上使用 EF6 访问数据库时,我的应用程序保持超时:

超时图片@本地 IIS

但是,如果我尝试使用 Visual Studio 2017 访问和调试我的 asp.net mvc 应用程序,则可以完美访问“始终启用加密”的数据库而不会超时。

iis express 用 VS2017

而且我也可以毫无问题地使用 SQL Management Studio 访问它。

两者(短信和 ASP.NET Web 配置)都使用此配置。

Column Encryption Setting=enabled;

注意:我使用的是 ASP.NET MVC 5 和 EF 6,SQL Server 2016 开发人员版。

对不起,我的英语不好。


更新: 我尝试使用 .NET Framework 数据提供程序来查看是否有任何线索可以帮助我解决此问题,使用以下代码:

var context = new TestDevEntities();
            StringBuilder sb = new StringBuilder();
            string connectionString = context.Database.Connection.ConnectionString;
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                connection.Open();
                using (SqlCommand cmd = new SqlCommand(@"SELECT [id],[name],[CCno]  FROM [TestDev].[dbo].[testEncCol]", connection, null, SqlCommandColumnEncryptionSetting.ResultSetOnly))
                {
                    using (SqlDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.HasRows)
                        {
                            
                            while (reader.Read())
                            {
                                sb.Append(reader[2] + ";");
                            }
                        }
                    }
                }
            }

上面的代码告诉我这个错误: 在此处输入图像描述

现在,有了这种错误,我知道我必须这样做:)

  1. 将应用程序池的身份更改为之前生成证书的“用户”。
  2. 导出 currentuser 证书(由始终加密使用)并导入到您要用作应用程序池身份的用户。

在职的

现在它起作用了!

EF 应该抛出某种像 .NET 数据提供者一样清晰的错误,而不是让我感到困惑的超时失败@_@


更新(1): 现在的问题是如何使用它(证书)与默认的 ApplicationPoolIdentity 而不是自定义帐户?

更新(2): 我已经完成了jakub 的建议,但仍然没有运气。 在此处输入图像描述

谢谢

4

1 回答 1

2

使用 DefaultAppPool 身份而不是自定义(用户)帐户的一种方法(可能是唯一方法)是将证书存储在本地计算机证书存储区(不是当前用户)中。

在本地计算机证书存储中创建证书后,您需要授予 DefaultAppPool 对证书的访问权限。您可以使用 Microsoft 管理控制台(以及本地计算机证书插件)来做到这一点:

  1. 右键单击证书,选择所有任务 > 管理私钥。
  2. 单击添加。
  3. 将位置设置为您的计算机(而不是您的域)。
  4. 输入 IIS AppPool\DefaultAppPool 作为对象名称。
  5. 单击确定两次。
于 2017-08-08T23:09:52.953 回答