2016-07-19 78 views
4

我们有一个采用总是加密的SQL Server 2016数据库。我们最近发布的ASP.net网站,试图从这个数据库中提取数据,并且当它我们得到这个错误:在哪里将总是加密证书放在IIS 7.5 Web服务器上?

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模拟被禁用。

哪里是将证书正确的位置?


更新 - 我们通过将Application Pool Identity帐户更改为创建证书的帐户来实现它。这也是在将证书添加到Web服务器上的当前用户 - 个人列表时使用的帐户。我们宁可不使用这个帐户,所以再次,证书的合适位置在哪里?

+0

嘿@RoastBeast,你到底解决这个问题,我挣扎得到这个工作我自己。我在IIS10上虽然... – AranDG

回答

0

始终是加密的要求正在访问数据库的用户有公共和私有密钥,这是它似乎需要您使用的帐户生成证书,因为他们都会有这样的关键。

我最常做的是生成证书和一个私钥和密码安全导出证书。然后将带有密钥的证书导入用于运行应用程序池的帐户的个人存储。这不能是通用的集成帐户,必须是您指定的服务帐户。

运行PowerShell脚本为用户:

whoami 
COMPUTER\myIISPoolUser 
Set-Location -Path cert:\localMachine\my 
Import-PfxCertificate –FilePath c:\AlwaysEncrypt.pfx 

或使用MMC。

whoami 
COMPUTER\myIISPoolUser 
certmgr.msc 

你也必须让应用程序池用户load user profile

+0

你能否在你的答案中增加一些细节?我能够将我的证书导出为PFX文件,但是之后我就失去了。 – Kevin

+0

如何将证书加入App Pool的商店? – Kevin

+0

当我运行certmgr时,它正在我的帐户下运行。我如何让certmgr在App Pool帐户下运行? – Kevin

0

IIS不能从本地用户认可证书,同时建立在SQL服务器的证书,默认情况下它的投入到本地用户存储,做下面的事情,并确保在本地机器生成的证书 - >当前用户证书存储

  1. 与默认证书生成加密列
  2. 撤消所有加密的列以纯文本格式
  3. 转到表安全性“您的数据库 - >表 - >安全性 - >始终加密密钥”中的证书和密钥,然后右键单击“CEK_Auto 1” - >“脚本列加​​密密钥” - >创建新的窗口,保持这个生成的脚本
  4. 删除CEK_Auto 1
  5. 执行步骤3“CMK_Auto 1”证书,并在“CMK_Auto 1”的剧本删除以及
  6. 更改证书路径“CurrentUser”中的“LocalMachine”
  7. 您的示例路径将如下所示:“N'LocalMachine/my/G4452V8ERH035D2557N235B29MWR0SV834263G26'”
  8. 执行CMK_Auto 1和CEK_Auto 1脚本
  9. 确保证书生成的本地机器的个人目录
  10. 它会工作,如果不与IIS快递测试,这意味着本地用户的个人目录
  11. 其余仍持有证书所有这些都确保在连接字符串中添加了“列加密设置=已启用”。

感谢

约翰拉杰什Ĵ

相关问题