加密 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.config 或 Web.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 失败错误的主要内容,如果未能解决你的问题,请参考以下文章