为 WinForms 应用程序加密 app.config 中的连接字符串
Posted
技术标签:
【中文标题】为 WinForms 应用程序加密 app.config 中的连接字符串【英文标题】:Encrypting connection strings in app.config for WinForms app 【发布时间】:2011-05-19 14:46:46 【问题描述】:我在 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
【问题讨论】:
【参考方案1】:当我将应用程序部署到本地 IIS 时,我偶然发现了答案,并收到错误“无法使用提供程序 'CustomProvider' 解密。来自提供程序的错误消息:密钥集不存在”
私钥存在权限问题,在本文的帮助下解决:
CryptographicException 'Keyset does not exist', but only through WCF
这篇文章包括许多可能的原因,解决我的问题的一个原因是从 MMC 证书管理单元中修复了“管理私钥”中的权限(请参阅链接,步骤布局合理)。
【讨论】:
以上是关于为 WinForms 应用程序加密 app.config 中的连接字符串的主要内容,如果未能解决你的问题,请参考以下文章
BackgroundWorker,我怎样才能显示真正的进步? C# Winforms
通过 ElementHost 将 WPF 应用程序转换为 UserControl 以在 WinForms 应用程序中使用