首页 文章

使用受保护的配置提供程序加密配置信息[关闭]

提问于
浏览
2

使用受保护的配置提供程序加密应用程序配置文件中的配置信息时,使用了什么加密?

使用什么算法和密钥来加密和解密信息?

Update

好的,我已经阅读了Sani Huttunen提供的链接并阅读了这些herehere .

因此RSAProtectedConfigurationProvider使用TripleDes和RSA加密
DpapiProtectedConfigurationProvider使用TripleDES .

RsaProtectedConfigurationProvider使用计算机帐户或用户帐户,DpapiProtectedConfigurationProvider使用用户的登录密码作为加密和解密的密钥 .

我认为这对于asp.net网络应用程序可以正常工作 . 但是Windows应用程序怎么样?

我一直认为我的所有连接字符串都应保存在app.config文件中,然后使用受保护的配置提供程序进行加密 .

但是,如果将winforms应用程序部署到另一台计算机,则无法解密连接字符串,因为密钥是基于开发人员的登录密码并保存在未随应用程序部署的密钥文件中 . 或者如果密钥文件与应用程序一起部署,那么任何人都可以解密app.config文件 .

它是否正确?那么使用这种方法有什么意义呢?

What's the method for protecting information in an app.config file for deployed windows applications?

3 回答

  • 0

    您可能想要阅读所有相关信息here .

    .NET框架中有两个提供程序:
    DpapiProtectedConfigurationProvider
    使用Windows数据保护API(DPAPI)来加密和解密数据 .

    RsaProtectedConfigurationProvider
    使用RSA加密算法加密和解密数据 .

  • 0

    你的winform应用试图解决什么问题?

    你有两个相互矛盾的问题 . 您需要将应用程序分发给不受信任的人 . 并且您需要与sql server的可信连接 .

    即使您对连接字符串进行加密,如果您在同一台计算机上以某种方式存储了解密密钥,那么您的用户也可以对您的应用进行反编译并确定它是什么 .

    即使只读取连接,它仍然容易受到SQL注入攻击 .

    什么是更好的解决方案是有一些宁静的api . 这将为您的用户提供他们可以做的事情的明确api . 然后,您可以管理用户和他们被允许做的事情(即,可以更新他们的详细信息但不能更新其他人,但仍然可以阅读每个人的公共统计数据) .

    查看http://wcf.codeplex.com/wikipage?title=WCF%20HTTP以获得创建安全api的简便方法 .

    (如果您提供更多详细信息,我可以使用可能更好地满足您需求的解决方案来修改我的答案 . )

  • 0

    这很棘手 . 如果要加密某些内容,则需要管理用于加密的密钥 .

    DpapiProtectedConfigurationProvider off将此加载到操作系统,操作系统有效地使用用户的密码来保护密钥 . (但是,您将被绑定到该帐户或计算机)

    RsaProtectedConfigurationProvider类似但提供了导出公钥/私钥对的方法 . 因此,您可以将其添加(导入)到另一台计算机 .

    然而,这又变得棘手,因为如果你想将应用程序移动到另一台机器,你需要复制公钥/私钥对 . 如果您(或您信任的人)可以这样做,并且之后删除密钥容器,这样就可以了 . 请记住,如果有人 grab 那个钥匙容器,你就会回到原点 .

    如果您使用的是Active Directory(我认为),您可以设置应用程序运行的用户帐户(在所有计算机上) . 这将允许您使用DpapiProtectedConfigurationProvider . 实际上,您也可以使用Active Directory安全地部署RsaProtectedConfigurationProvider的密钥容器 . (我不是AD的专家,你需要自己谷歌)

    使用SQL Server Integrated Security是另一种选择 . 这样您就可以将所有凭据存储在一起 . (如果你能成为最好的选择) .

    另一个选项(这是我正在为我正在进行的项目做的事.YMMV)是实现ProtectedConfigurationProvider .

    我没有控制AD和安装密钥对不适合我们的部署工作流程 . 所以在我的情况下,当应用程序尝试从配置中获取连接字符串时,它会在注册表中查找 . 如果它在那里找到明文密码,(不要问为什么,但这可以适用于我们的部署工作流程),它会使用DPAPI加密它,但是对应用程序部署到的机器加密 . 然后将它放入web.config并从注册表中删除它 . 所以我做了需要输入一次凭证 . 但是运行应用程序会导致它被加密,但只能由该计算机上的该应用程序进行解密 .
    那可以从我独特的环境中解决 . 但是,如果可以,建议的解决方案是使用SQL Server集成安全性 .

相关问题