使用受保护的配置提供程序加密应用程序配置文件中的配置信息时, 使用什么加密?
使用哪种算法和密钥来加密和解密信息?
更新
好的,我已经阅读了Sani Huttunen提供的链接并阅读了这些here和here。
因此RSAProtectedConfigurationProvider使用TripleDes和RSA加密和
DpapiProtectedConfigurationProvider使用TripleDES。
RsaProtectedConfigurationProvider使用计算机帐户或用户帐户 DpapiProtectedConfigurationProvider使用用户的登录密码作为加密和解密的密钥。
我认为这适用于asp.net网络应用程序。但是Windows应用程序呢?
我认为我的所有连接字符串都应保存在app.config文件中,然后使用受保护的配置提供程序进行加密。
但是如果你将winforms应用程序部署到另一台机器上,那么它将无法解密连接字符串,因为密钥是基于开发人员的登录密码并保存在未与应用程序一起部署的密钥文件中。或者如果密钥文件与应用程序一起部署,那么任何人都可以解密app.config文件。
这是对的吗?那么使用这种方法有什么意义呢?
为部署的Windows应用程序保护app.config文件中的信息的方法是什么?
答案 0 :(得分:0)
您可能希望阅读所有相关内容here。
.NET框架中有两个提供程序:
DpapiProtectedConfigurationProvider
使用Windows数据保护API(DPAPI)来加密和解密数据。
RsaProtectedConfigurationProvider
使用RSA加密算法加密和解密数据。
答案 1 :(得分:0)
这很棘手。 如果要加密某些内容,则需要管理用于加密的密钥。
DpapiProtectedConfigurationProvider off将此加载到操作系统,该操作系统有效地使用用户的密码来保护密钥。 (但是,您将被绑定到该帐户或计算机)
RsaProtectedConfigurationProvider类似但提供了导出公钥/私钥对的方法。因此,您可以将其添加(导入)到另一台计算机。
然而,这又变得棘手,因为如果你想将应用程序移动到另一台机器,你需要复制公钥/私钥对。如果您(或您信任的人)可以这样做,并且之后删除密钥容器,这样就可以了。请记住,如果有人抓住那个钥匙容器,你就会回到原点。
如果您使用的是Active Directory(我认为),您可以设置应用程序运行的用户帐户(跨所有计算机)。这将允许您使用DpapiProtectedConfigurationProvider。实际上,您也可以使用Active Directory安全地部署RsaProtectedConfigurationProvider的密钥容器。 (我不是AD的专家,你需要自己谷歌)
使用SQL Server Integrated Security是另一种选择。这样您就可以将所有凭据存储在一起。 (如果你能成为最好的选择)。
另一个选项(这是我正在为我正在进行的项目做的事.YMMV)是实现ProtectedConfigurationProvider。
我无法控制AD并且安装密钥对不适合我们的部署工作流程。 所以在我的情况下,当应用程序尝试从配置中获取连接字符串时,它会在注册表中查找。如果它在那里找到明文密码,(不要问为什么,但这可以适用于我们的部署工作流程),它会使用DPAPI加密它,但是对应用程序部署到的机器加密。 然后将它放入web.config并从注册表中删除它。 所以我确实需要输入一次凭证。但是运行应用程序会导致它被加密,但只能通过该计算机上的该应用程序进行解密 在 这可以从我特殊的环境中解决。但是,如果可以,建议的解决方案是使用SQL Server集成安全性。
答案 2 :(得分:0)
你的winform应用试图解决什么问题?
你有两个相互矛盾的问题。您需要将应用程序分发给不受信任的人。并且您需要与sql server的可信连接。
即使您对连接字符串进行加密,如果您在同一台计算机上以某种方式存储了解密密钥,那么您的用户也可以对您的应用进行反编译并确定它是什么。
即使只读取连接,它仍然容易受到SQL注入攻击。
什么是更好的解决方案是有一些宁静的api。这将为您的用户提供他们可以做的事情的明确api。然后,您可以管理用户和他们被允许做的事情(即,可以更新他们的详细信息但不能更新其他人,但仍然可以阅读每个人的公共统计数据)。
请查看http://wcf.codeplex.com/wikipage?title=WCF%20HTTP,了解创建安全API的简便方法。
(如果您提供更多详细信息,我可以使用可能更好地满足您需求的解决方案来修改我的答案。)