加密 web.config 失败错误

Posted

技术标签:

【中文标题】加密 web.config 失败错误【英文标题】:encrypting web.config failed error 【发布时间】:2010-11-05 08:10:52 【问题描述】:

我知道 ppl 已经问过有关加密 web.config 的问题。

我也在尝试加密我的测试配置文件,但我收到了这个错误。

aspnet_regiis -pef "connectionStrings" "C:\encryptedWeb.config" 加密配置部分... 无法打开物理路径“C:\EncryptedWeb.config”的配置。 失败!

我只是想知道,失败的原因是什么。

我得到了答案,问题在于 web.config 的只读属性。 在我删除只读之后它就像一个魅力。

【问题讨论】:

尝试从 connectionStrings 中删除引号。 【参考方案1】:

对于命令“aspnet_regiis -pef”,配置文件的路径是物理路径(非虚拟),也是web.config所在目录/文件夹的路径。所以不应该在路径中包含文件名,例如

如果您的 web.config 路径位于 D:\MyConfiguration\web.config,那么在加密/解密时您将按如下方式使用它:

加密:

aspnet_regiis -pef [sectionName] "D:\MyConfiguration"

解密:

aspnet_regiis -pdf [sectionName] "D:\MyConfiguration"

【讨论】:

即使是 D:\MyConfiguration\ 中的额外反斜杠也会引发非法字符错误【参考方案2】:

我知道这很旧,但我刚刚遇到了同样的问题,其他答案都没有问题。

您不应该将文件名放在路径中,文件必须命名为web.config。因此,对于您的示例,如果您的 web.config 文件实际上在 C:\ 中,您将输入:

aspnet_regiis -pef "connectionStrings" "C:\"

并且您的文件必须命名为 web.config,因为该工具只会查找该文件。

对于那些文件不在C:\ 中的人,您需要输入文件的完整路径(站点的根目录)。您还需要将cd 放入包含aspnet_regiis.exe 文件的目录中,或者也将工具的完整文件路径放入:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -pef "ConnectionStrings" "C:\Ghron\Projects\Company\trunk\project1\project1"

此外,其他一些答案是有效的点 - 参数区分大小写,因此您的路径和部分名称必须使用正确的大小写。我使用 "ConnectionStrings" 而不是 "connectionStrings"(小写 c)浪费了大约 20 分钟。

【讨论】:

【参考方案3】:

这些部分区分大小写。

不要在路径末尾添加\(不需要 web.config)。

您无需直接在网站上进行;而是将文件复制到任何位置。

加密:

aspnet_regiis -pef "SECTIONTOENTRYPT" "d:\tempEnCrypt" -prov WhateverProviderYouAreUsing 

解密:

aspnet_regiis -pdf "SECTIONTOENTRYPT" "d:\tempEncrypt"

您也可以使用它来加密 app.config,只需将用于加密/解密的文件重命名为 web.config

【讨论】:

【参考方案4】:

加密/解密 web.config

来源取自此链接https://mywebanecdotes.com/2016/09/17/encrypting-credentials-in-app-config-for-multiple-machines/ 首先,如果你有App.config,你需要重命名为Web.config。完成后将其重命名。这是因为 aspnet_regiis.exe 只能识别 Web.config 文件。 然后在 App.configWeb.config 文件中创建自定义属性 SecuredSettings(任何名称都可以)。
<configuration>
<configSections>
   <section name="SecuredSettings" type="System.Configuration.NameValueSectionHandler" />
 </configSections>
 <SecuredSettings>
      <add key="pwrd" value="password" />
 </SecuredSettings>
 <configProtectedData>
   <providers>
     <add keyContainerName="MyCustomKeys"
              useMachineContainer="true"
              name="MyEncryptionProvider"
              type="System.Configuration.RsaProtectedConfigurationProvider"/>
   </providers>
 </configProtectedData>

</configuration>
在 C# 中,您可以像通常那样检索这些值。例如:
var attr = ConfigurationManager.GetSection("SecuredSettings") as NameValueCollection;
var value = attr["pwrd"];
剩下的就是加密或解密 运行cmd 以管理员身份,定位到C:\Windows\Microsoft.NET\Framework\v4.0.30319 “创建具有特定容器名称的公共/私有 RSA 密钥对。它们也应标记为可导出(否则有什么意义!)” aspnet_regiis.exe -pc MyCustomKeys -exp “授予帐户访问容器的权限” aspnet_regiis.exe -pa MyCustomKeys "NT AUTHORITY\NETWORK SERVICE" “以下行现在将加密您的部分(pwdr 值)。-pef 开关告诉应用程序查找 web.config 文件并使用开头声明的提供程序(使用类型 RsaProtectedConfigurationProvider )" aspnet_regiis.exe -pef "SecuredSettings" "C:\DEV\ConsoleApp\DEX" -prov MyEncryptionProvider 将这些密钥导出到另一台机器(如果需要) aspnet_regiis.exe -px MyCustomKeys keys.xml -pri 它将在 C:\Windows\Microsoft.NET\Framework\v4.0.30319 中生成keys.xml 文件 复制此文件并将其放在您要使用它的另一台机器上,到同一位置C:\Windows\Microsoft.NET\Framework\v4.0.30319,然后运行: aspnet_regiis -pi MyCustomKeys keys.xml 之后你就可以从两边删除文件了。 不要忘记将 Web.config 重命名为 App.config,如果您在开始时这样做了。 解密文件: aspnet_regiis.exe -pdf "SecuredSettings" "C:\DEV\ConsoleApp\DEX"

【讨论】:

【参考方案5】:

我遇到了同样的问题,这对我有用:

    将 aspnet_regiis 工具的文件夹路径添加到您的 %PATH% 变量中。这确保可以从命令行中的任何文件夹访问该工具。有关如何添加 %PATH% 变量的简要说明,请参阅此页面:http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx 导航到您的 Web 根文件夹(不知道这是否有必要,但这是我执行命令时导航到的位置)

    使用 -pe 参数和 -app 参数执行命令,如下所示:

    aspnet_regiis -pe 要加密的部分 -app "从根文件夹到应用程序的路径,例如:"/myappname",使用引号

【讨论】:

【参考方案6】:

看看这个,看看你是否设置正确

http://msdn.microsoft.com/en-us/library/ms998283.aspx

一种可能性是指定站点 -site“站点名称” 否则它将使用默认网站。

【讨论】:

我有两个问题。第一个我们可以单独测试不属于任何应用程序的配置文件。如果我的 IIS 中有两个配置文件,如何选择其中一个。 不,web.config 需要在应用程序中。而且,据我所知,每个文件夹只有一个 web.config。我认为 2 个网络配置是 VS2010 的一部分 Web.config 文件在层次结构中使用,例如,根文件夹将有一个 web.config,但可以在子文件夹中用另一个 web.config 覆盖。你问的是这个吗? 实际上我担心的是,如果出现问题,我不想弄乱我的实际 web.config。所以我创建了一个单独的配置文件只是为了测试。所以你的意思是我必须处理我的实际配置文件,即使我喜欢与否。 在 web.config 上工作,在更改您认为可能会破坏它的内容之前将其复制,将其命名为不同的名称,或保存在其他位置【参考方案7】:

您可以尝试使用此tool 来加密您的网络配置

【讨论】:

【参考方案8】:

我在从网站加密配置文件时遇到同样的问题。 提供从网站而非默认网站进行加密的命令。 当应用程序位于默认网站时,以下命令有效: aspnet_regiis.exe -pe "connectionStrings" -app "/sitename" -prov "DataProtectionConfigurationProvider"

【讨论】:

【参考方案9】:

我得到一个“路径中的非法字符”错误,当我删除路径名周围的双引号时该错误消失了。没有任何意义,但是你来了。

我还编写了一个 PowerShell 脚本来执行加密/解密而不处理 aspnet_regiis:https://github.com/mhenry1384/EncryptDecryptConfig

【讨论】:

【参考方案10】:

如果您的服务器使用该功能,请不要忘记以管理员身份运行 CMD,就像我今天所做的那样。很容易犯的一个错误。

【讨论】:

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

将 app.config 设置复制到 web.config 的替代方法?

web.Config 与数据库设置表

“&”字符会破坏存储在 web.config 中的密码

加密 Web.Config

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

加密 web.config 中的成员资格元素时出现问题