始终加密:无法使用密钥库提供程序解密列加密密钥:' MSSQL_CERTIFICATE_STORE'

时间:2017-10-27 12:37:02

标签: c# wcf encryption always-encrypted

我在我的Web应用程序中执行始终加密,它由窗口服务托管的WCF服务插入数据。我在将数据插入加密列时遇到以下错误。 无法使用密钥库提供程序解密列加密密钥:' MSSQL_CERTIFICATE_STORE'。加密列加密密钥的最后10个字节是:' 64-56-87-3B-EC-2E-11-9D-2A-B5'。 带有指纹的证书' A0D10777759BBD947EEA6F3F5D1A7989514C45F0'没有在证书商店找到我的'在证书位置' CurrentUser'。验证数据库中列主密钥定义中的证书路径是否正确,并且证书已正确导入证书位置/存储。 参数名称:masterKeyPath

4 个答案:

答案 0 :(得分:4)

好的,我发现了问题。案例就是这样的:我总是使用SQL Server Management Studio为一个列加密,该列以我自己的帐户开头。因为我使用自己的Windows帐户运行SSMS进程,所以它将证书放在我帐户的当前用户/我的目录中。但是,IIS应用程序池使用不同的帐户运行,因此它无法运行。在我的帐户下找到证书' s CurrentUser /我的目录。

我使用启动SSMS并创建证书的同一帐户重新启动了IIS应用程序池,问题就一去不复返了。

由于

答案 1 :(得分:2)

此问题的解决方案是

  1. 运行(MMC)
  2. 在管理控制台中选择证书。
  3. 找到您始终加密的证书,“我的用户”或“机器帐户”
  4. 右键单击->所有任务->管理私钥。
  5. 添加正在建立SQL连接的windws用户。
  6. 用户可以是进程用户,可以是IIS或任何Windows登录用户。

它解决了我的问题。

答案 2 :(得分:1)

当您开始在Visual Studio中使用数据库或在其他计算机上使用Web服务器时会发生这种情况,然后存储始终加密的数据库。

您的部分信息将是:证书商店“我的”在证书位置'CurrentUser'中找不到指纹'............ BAE90'的证书。

转到数据库所在的计算机。 打开证书管理器。

右键单击“证书 - 当前用户”并对最后几位数字进行查找(在示例BAE90中)。 用户查看字段:SHA1哈希。

找到Cert后,右键单击它并导出到文件。

在新的Visual Studio计算机上打开证书管理器并导入证书,您应该很高兴。

与其他答案一样,您还需要将应用程序池中的用户“同步”到已添加证书的用户。

答案 3 :(得分:0)

我遇到了同样的问题并尝试了很多解决方案,但实际解决方案非常简单,解决了我的问题。

要在 ii 的服务器上安装证书,而不管您的数据库服务器是在另一台服务器还是同一台服务器上:

1 - 转到 ii 服务器的证书管理器:在“运行”中输入 certmgr.msc 并按 Enter

2 - 您将找到个人文件夹 --> 证书文件夹:右键单击它并导入您的证书。

3 - 从文件中选择您的证书,然后选择自动检测路径选项单选按钮并完成安装,而不是在个人上安装。

4 - 请记住,此安装的证书不会出现在您的个人 --> 证书文件夹下,但您的应用程序会在此之后运行,因为证书将自动安装在正确的路径上。

经过 3 天的研发,这个解决方案对我有用。