【发布时间】:2016-11-22 13:48:00
【问题描述】:
我们有一个使用 Always Encrypted 的 SQL Server 2016 数据库。我们最近发布的 ASP.net 网站试图从这个数据库中提取数据,但当我们得到这个错误时:
Error: Failed to decrypt column 'EnSSd'. Failed to decrypt a column encryption key using key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: 'B8-48-B3-62-90-0B-1D-A6-7D-80'. Certificate with thumbprint '97B0D3A64CADBE86FE23559AEE2783317655FD0F' not found in certificate store 'My' in certificate location 'CurrentUser'. Verify the certificate path in the column master key definition in the database is correct, and the certificate has been imported correctly into the certificate location/store. Parameter name: masterKeyPath
现在我们知道这意味着证书没有放在服务器上的正确位置。在开发过程中,我们只是将证书放在个人证书存储下的证书管理单元中,这很有效,但是现在网站已经发布,我们尝试在 Web 服务器上做同样的事情,但它不起作用(我们有点想通了)不会)。
站点上启用了匿名身份验证,并且匿名用户身份是 IUSR。 ASP.NET 模拟已禁用。
证书放在哪里合适?
更新 - 我们通过将应用程序池身份帐户更改为创建证书的帐户来使其工作。它也是将证书添加到 Web 服务器上的 Current User-Personal 列表时使用的帐户。我们宁愿不使用这个帐户,那么再次,放置证书的合适位置在哪里?
【问题讨论】:
-
嘿@RoastBeast,你最终解决了这个问题吗,我自己也在努力解决这个问题。不过我在 IIS10 上...
-
根据主密钥配置部分中的docs.microsoft.com/en-us/azure/sql-database/…,只有两个地方可以存储证书 - Windows 证书存储或 Azure Key Vault。添加到 Windows 证书存储时,您可以添加为特定用户 (SA) 或本地计算机,这意味着有权访问该服务器的任何人都可以访问他们的密钥。我认为最安全的选择是只允许访问 SA,但我发现用户必须始终登录到服务器。
-
还要澄清一下 - 我会说 Azure Key vault 会更安全,但在企业环境中,我们通常只能访问 Windows 证书存储,并在此处以本地用户身份添加证书(服务帐户)将阻止管理员使用证书自己访问数据。
标签: asp.net iis iis-7.5 sql-server-2016 always-encrypted