0

我在 Web 和 WinForms 应用程序之间使用通用数据库代码。我研究并制定了如何加密 web.config 和 app.config 文件的连接字符串部分。那部分没问题。我还想出了如何在我的 Azure Web 应用程序中解密连接字符串,没关系。将 .pfx 文件加载到机器的证书存储区后,我还可以在我的 WinForms 应用程序中读取连接字符串,但在我重新启动后它会失败,因为它在 pfx 文件中找不到私钥。

我正在使用使用以下命令创建的证书:

makecert -r -pe -n "CN=myconfig" -sky exchange "myconfig.cer" -sv "myconfig.pvk"

pvk2pfx -pvk "myconfig.pvk" -spc "myconfig.cer" -pfx "myconfig.pfx" -pi

这给了我 3 个文件:myconfig.pvk、myconfig.cer、myconfig.pfx

我认为问题是私钥没有存储在 pfx 文件中,并且每次重新启动后都需要重新验证 - 但我对加密知之甚少,不知道如何做到这一点。此外,WinForms 应用程序非常有限地分发到受控机器上,所以我想手动安装每个证书。

我是加密的新手并且被卡住了。我可以将 .pfx 文件加载到机器上,输入私钥(我知道但不会告诉用户)并永久存储吗?我是否遗漏了一些东西-我应该安装不同的证书文件还是生成它的方式?我不想让私钥可以访问。如果有人窃取了 app.config,我不希望他们能够解密它。

注意:我已阅读有关 RsaProtectedConfigurationProvider 和 DPAPIProtectedConfigurationProvider 的信息。我选择使用 PKCS12ProtectedConfigurationProvider 因为它适用于 Azure,参考:http: //blogs.msdn.com/b/sqlazure/archive/2010/09/07/10058942.aspx

4

1 回答 1

0

当我将应用程序部署到本地 IIS 时,我偶然发现了答案,并收到错误“无法使用提供程序'CustomProvider'解密。来自提供程序的错误消息:密钥集不存在”

私钥存在权限问题,在本文的帮助下解决:

CryptographicException 'Keyset 不存在',但只能通过 WCF

这篇文章包括许多可能的原因,一个解决了我的问题的原因是从 MMC 证书管理单元中修复了“管理私钥”中的权限(请参阅链接,这些步骤布置得很好)。

于 2010-12-05T22:16:22.157 回答