为 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

以编程方式加密 .NET 中的配置文件

使用本地数据库为 winForms 创建安装程序

通过 ElementHost 将 WPF 应用程序转换为 UserControl 以在 WinForms 应用程序中使用

具有加密功能的嵌入式 SQL 数据库?

javascript App con expressbásica