在 web.config 中加密 appSettings

Posted

技术标签:

【中文标题】在 web.config 中加密 appSettings【英文标题】:Encrypting appSettings in web.config 【发布时间】:2010-09-08 10:13:48 【问题描述】:

我正在开发一个网络应用程序,它需要将用户名和密码存储在 web.Config 中,它还引用了一些将由网络应用程序本身而不是客户端请求的 URL。

我知道 .Net 框架不允许提供 web.config 文件,但我仍然认为以纯文本形式保留此类信息是不好的做法。

到目前为止,我阅读的所有内容都要求我使用命令行开关或将值存储在服务器的注册表中。我无法访问这些,因为主机在线并且我只有 FTP 和控制面板 (helm) 访问权限。

谁能推荐我可以使用的任何好的、免费的加密 DLL 或方法?我宁愿不开发自己的!

感谢到目前为止的反馈,但我无法发出命令,也无法编辑注册表。它必须是一个加密工具/助手,但只是想知道哪个!

【问题讨论】:

【参考方案1】: Encrypting and Decrypting Configuration Sections (ASP.NET) 在 MSDN 上 Encrypting Web.Config Values in ASP.NET 2.0 在 ScottGu 的 blog Encrypting Custom Configuration Sections K. Scott Allen 的 blog

编辑: 如果您不能使用 asp 实用程序,您可以使用SectionInformation.ProtectSection 方法加密配置文件。

代码项目示例:

Encryption of Connection Strings inside the Web.config in ASP.Net 2.0

【讨论】:

Aku,不幸的是,这些链接指向命令行,我无法使用这些链接,因为我们无法直接访问命令行。如果我要在自己的机器上对其进行加密,然后将其部署到服务器,它将无法工作,因为密钥将不存在/不同 他指的是Encrypting Custom Configuration Sections。就是一个简单的例子,相关的MSDN文章是here。【参考方案2】:

使用 aspnet_setreg.exe http://support.microsoft.com/kb/329290

【讨论】:

这构成了一个违反网站规则的仅链接答案。【参考方案3】:

乍一看似乎很简单,但我遇到了一些障碍。

因此,我使用默认加密提供程序提供了适合我的步骤(加密 appSettings 部分):

加密 web.config 中的部分:

    打开管理命令外壳(以管理员身份运行!)。命令提示符将位于 C: 上,这是假设用于以下步骤。进一步假设应用程序部署在 D:\Apps\myApp 上 - 将其替换为您在 步骤 3 中使用的路径。 cd "C:\Windows\Microsoft.NET\Framework64\v4.0.30319",在 32 位 Windows 系统上使用 Framework 而不是 Framework64 cd /D "D:\Apps\myApp"注意:/D 开关将自动更改驱动器,如果它与您当前的驱动器不同。这里会改变路径和驱动,所以之后当前目录为D:\Apps\myAppc:aspnet_regiis -pef appConfig .

您应该会看到这条消息:

Microsoft (R) ASP.NET RegIIS 版本 4.0.30319.0 用于在本地计算机上安装和卸载 ASP.NET 的管理实用程序。 版权所有 (C) 微软公司。版权所有。 加密配置部分... 成功了!

您还可以解密 web.config 中的部分: 这些是相同的步骤,但对于 aspnet_regiis,使用选项 -pdf 而不是 -pef

也可以加密 web.config 的其他部分,例如,您可以通过以下方式加密连接字符串部分:

aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"

更多详情请见here.


注意:上述加密对您的 Web 应用程序是透明的,即您的 Web 应用程序无法识别设置已加密。 您还可以选择使用非透明加密,例如使用 Microsoft 的 DPAPI 或使用 AES 以及框架的 AES Class。 如何使用 DPAPI 我已经描述了here at ***。 DPAPI 的工作方式非常相似,它使用机器或用户凭证的密钥。通常,非透明加密可以为您提供更多控制权,例如您可以添加 SALT,或者您可以使用基于用户密码的密钥。如果您想了解有关如何从密码短语生成密钥的更多信息,请查看here。

【讨论】:

【参考方案4】:
    发布您的项目 以管理员身份打开开发者命令提示符 使用此命令asp_rigiis -pef "appSettings" "C:\yourPublishPath" -prov "DataProtectionConfigurationProvider"

【讨论】:

我很确定这使用了您的机器密钥,因此一旦加密就无法传输到其他机器,在我上面的场景中,我无法在主机上运行命令行

以上是关于在 web.config 中加密 appSettings的主要内容,如果未能解决你的问题,请参考以下文章

在共享主机上加密 web.config

加密解密技术—Web.config加密和解密

加密 Web.Config

加密 web.config 失败错误

加密web.config中的连接字符串

Web.config 加密错误