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

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

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

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

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

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

【问题讨论】:

  • 尝试从 connectionStrings 中删除引号。

标签: asp.net security iis configuration


【解决方案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

      <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】:

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

        1. 将 aspnet_regiis 工具的文件夹路径添加到您的 %PATH% 变量中。这确保可以从命令行中的任何文件夹访问该工具。有关如何添加 %PATH% 变量的简要说明,请参阅此页面:http://geekswithblogs.net/renso/archive/2009/10/21/how-to-set-the-windows-path-in-windows-7.aspx
        2. 导航到您的 Web 根文件夹(不知道这是否有必要,但这是我执行命令时导航到的位置)
        3. 使用 -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,就像我今天所做的那样。很容易犯的一个错误。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-07-06
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-02-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-10-21
                  相关资源
                  最近更新 更多