加密web.config失败错误

时间:2009-06-23 21:27:15

标签: asp.net security iis configuration

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

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

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

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

我得到了答案,这是web.config的readonly属性,这是问题所在。 我删除了readonly之后就像魅力一样。

8 个答案:

答案 0 :(得分:34)

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

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

<强>加密

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

<强>解密:

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

答案 1 :(得分:5)

我知道这已经过时了,但我遇到了同样的问题,其他答案都没有解决问题。

你不应该把文件名放在路径中,文件必须被称为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分钟。

答案 2 :(得分:0)

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

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

可能性是指定网站     -site“SiteName”  否则它将使用默认网站。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

    aspnet_regiis -pe {section to encrypt} -app“{path from root folder to app,like:”/ myappname“,use quotes}

答案 5 :(得分:0)

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

答案 6 :(得分:0)

当我删除了包含我的路径名的双引号时,我收到了“路径中的非法字符”错误。没有任何意义,但你有。

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

答案 7 :(得分:0)

加密/解密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 ,然后运行:< / li>
  • aspnet_regiis -pi MyCustomKeys keys.xml
  • 您可以从两侧删除文件。
  • 如果您刚开始将 Web.config 重命名为 App.config ,请不要忘记。
  • 解密文件:
  • aspnet_regiis.exe -pdf "SecuredSettings" "C:\DEV\ConsoleApp\DEX"