配置文件(Web.Config)加密解密详细说明

来源:互联网 发布:网络女歌手名单大全 编辑:程序博客网 时间:2024/05/22 14:01

ASP.NET IIS 注册工具 (Aspnet_regiis.exe)官方文档:http://msdn.microsoft.com/zh-cn/library/k6h9cz8h(VS.80).aspx

 

配置文件webform下是web.config,winform下是app.config,如果要加密app.config,先把它改名为:web.config,加密后再重新改回原名就可以了

打开SDK命令提示执行以下命令:开始-->所有程序-->Microsoft .NET Framework SDK v2.0-->SDK命令提示

加密:aspnet_regiis -pef "配置节" "目录"

解密:aspnet_regiis -pdf "配置节" "目录"

如:aspnet_regiis -pef "appSettings" "C:/Inetpub/wwwroot/hr512"

加密C:/Inetpub/wwwroot/hr512/web.config中设置的appSettings节点中的内容

读取节点值和未加密前相同,.net会自动解密

 

如果出现以下错误信息:

未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误消息为: 打不开 RSA 密钥容器。

解决方法:

在SDK命令下运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY/NETWORK SERVICE"

 

 

================================================================================

 

 

 

 

如果想对web.config的数据库连接字符串进行加密的话,这里提供了两个方法:

 

方法一 
使用“DataProtectionConfigurationProvider”形式加密。

创建test.aspx文件,代码如下:

 

 
总结:此方法很方便,并且很简单,但安全性没有密钥加密高。

 

 

方法二
使用“RSAProtectedConfigurationProvider”形式来加密
test.aspx程序文件基本如上,
把section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
改成section.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
但这个时候你访问网站的时候很有可能会出现

说明: 在处理向该请求提供服务所需的配置文件时出错。请检查下面的特定错误详细信息并适当地修改配置文件。
分析器错误信息: 未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误信息为: 打不开 RSA 密钥容器。

这样的错误,解决方法是:
进dos运行:aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY/NETWORK SERVICE"
如果运行出错,需要把目录 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727 放入环境变量path中。
此时就可以成功访问网站了。
同样可以通过命令行来实现“RSAProtectedConfigurationProvider”加密。

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

您可能会出现的问题:

 

 

一:分析器错误信息: 未能使用提供程序“DataProtectionConfigurationProvider”进行解密。提供程序返回错误信息为: 该项不适于在指定状态下使用。

二:未能使用提供程序“RsaProtectedConfigurationProvider”进行解密。提供程序返回错误消息为: 打不开 RSA 密钥容器。

 

解决办法:(请耐心看完,你一定会找到问题所在的。)

 

 

上面这段文字的重心:

      既然是 key 文件都与本地计算机相关了,那相对路径自然意义就不大了(不敢说绝对没有意义).  key 文件无法直接复制到其他机器上的原因是对这个密钥文件又使用 DPAPI (Windows 数据保护) 进行加密。使用了 DPAPI 进行加密的数据只能在特定的计算机上使用,换个机器当然就不行了!因为你加密的时候使用了当前计算机和登陆到该计算机的用户的信息。

      所以顺便提一点:产生 key 文件的过程中有个选择项, 一个是用户模式,一个是机器模式。用户模式是登陆到该计算机的用户才能使用这个 key文件,机器模式当然就是只要是这个计算机上的用户都可以使用这个 key 文件。比如部署 WebForms 的WebSite 需要使用机器模式,至于WinForms的部署,如果不能确认计算机上只有一个帐户会使用你部署的软件,还是使用机器模式吧!

      针对第一个问题的解决方案:

      如果想将一个配置文件(比如web.config, App.config)在一台计算机加密后,在其他计算机上都能使用,就达到了我们的目的。

      说到对配置文件加密,自然要提到它们两个:

      DPAPIProtectedConfigurationProvider。使用 Windows 数据保护 API (DPAPI)对数据进行加密和解密。

      RsaProtectedConfigurationProvider。使用 RSA 加密算法对数据进行加密和解密。

      这两个提供程序都提供对数据的强加密;但是,如果打算在多台计算机上使用同一个加密配置文件,则只有使用RsaProtectedConfigurationProvider。因为这个才能导出用于对数据进行加密的加密密钥,并在另一台计算机上导入它们。

      我们使用配置工具对配置文件的配置区进行加密时可以指定哪个ProtectedConfigurationProvider。很显然,在解决这个问题上,我们只能使用 RsaProtectedConfigurationProvider。由于不同的计算机上RSA密钥容器是各不相同的,所以我们需要从一台计算机上导出一个RSA 密钥容器,然后导入其他计算机上!由于导入方式是可以用 DOS 命令实现,所以在部署上不存在问题!另外,由于.NET Framework 有个默认的RSA密钥容器,名称为 "NetFrameworkConfigurationKey" ,在machine.config文件可以看到这个默认的参数。
 
        先提示以下:aspnet_regiis.exe 在 C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727 下。C 盘是我的安装路径。所以使用 DOS 命令要注意路径。(可以通过 开始菜单 -> 所有程序 -> Microsoft Visual Studio 2005 -> Visual Studio Tools -> Visual Studio 2005 命令提示 来打开使用 aspnet_regiis 命令的 cmd 界面。)

(如果您找不到Visual Studio 2005 命令提示,则说明您没有安装完全)

       

步骤如下:

(1):在当前计算机上,导出 RSA密钥容器。(可以在导出文件前指定路径。)

           aspnet_regiis -px "NetFrameworkConfigurationKey" D:/RSAkeys.xml -pri

(2):在当前计算机上,用企业库工具加密配置文件。ProtectedConfigurationProvider 只能选择 

           RsaProtectedConfigurationProvider。

(3):在部署的计算机上, 导入名为 "NetFrameworkConfigurationKey" 的 RSA 密钥容器。

           aspnet_regiis -pi "NetFrameworkConfigurationKey" D:/RSAkeys.xml

  

(1)和(2)可以在当前计算机直接操作,(3)的 DOS 命令可以在部署时由程序中完成。

这样就完成了!

 

        提示一下:有可能步骤(1)导出失败,它不能使用 -pri 这个参数,而这个参数是导出解密使用的信息!如果没有它,在其他机器上只能加密新的东西。那么解决方法如下:

        (1)在当前计算机上, 创建新的 RSA 密钥容器,它的名称为: CustomKeys 。(这里有个用户级别和计算机级别的,下面的方式是创建计算机级别的,名字按照你的要求取)

        aspnet_regiis -pc "CustomKeys" -exp


        (2) 在当前计算机上, 向帐户授予访问权限

        aspnet_regiis -pa "CustomKeys" "NT AUTHORITY/NETWORK SERVICE"

        其他需要访问权限的帐户也应该被授权。

        (3)在当前计算机上,导出 RSA密钥容器。(可以在导出文件前指定路径。)

        aspnet_regiis -px "CustomKeys" D:/RSAkeys.xml -pri


        (4)在当前计算机上,将machine.config (在C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG) 中 keyContainerName = "NetFrameworkConfigurationKey"  替换为我们新创建的名称:keyContainerName  = "CustomKeys"。

        (5)在当前计算机上,用企业库工具加密配置文件。ProtectedConfigurationProvider只能选择 RsaProtectedConfigurationProvider。

        (6)在部署的计算机上, 导入名为 "NetFrameworkConfigurationKey" 的 RSA 密钥容器。

        aspnet_regiis -pi "NetFrameworkConfigurationKey" D:/RSAkeys.xml


        顺便提一下删除 RSA密钥容器 的命令:

        aspnet_regiis -pz "CustomKeys"

        当你输入一个错误的命令,会显示帮助命令信息。另外提示: 以上命令如果使用复制的方式,一定要注意检查下划线和空格的位置!

原创粉丝点击