web.config的加密和解密

为什么要对web.config进行加密?
    先谈为什么?原因其实就是基于安全方面的考虑
    简单的说,在asp.net中,加密web.config可以有效的保证数据库用户和密码安全,以及其他重要配置信息的安全。
    复杂的说,在asp.net中,可以使用受保护配置来加密web.config中的敏感信息(如用户名,密码,数据库连接字符串和加密密钥,etc)
              对配置信息进行加密后,即使功击都获取了对配置文件的访问,也可以使功击者难以获取对敏感信息的访问,从而改进应用程序的安全性。
如何加密web.config呢?
(以下只是演示,具体项目具体操作)
1.    新建一个website或者webapplication project (E:\Enconfig\WebApplication1)
2.    在web.config中新增一个
< connectionStrings >
    
< add  name ="SqlServices"  connectionString ="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"   />
</ connectionStrings >
3.    针对connectionStrings进行加密,如下:
使用命令行工具regaspnet_iis
(有关于Framework的版本号是自行选定的,我们这里选择v2.0.50727这个文件夹)
Cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Aspnet_regiis -pe "connectionStrings" -app "/EnConfig/WebApplication1"
这里如果直接执行的话,会报错的,错误信息如下:
Encrypting configuration section
A configuration file cannot be created for the requested Configuration object.
Failed!
那怎么解决呢,也是很简单
只需要把E:\Enconfig的这个文件夹的属性设置一下web共享即可。
具体见图:(图1)
这样的话,对web.config中的ConectionString就加密好了

那如何解密呢?
*其实ASP.NET 在处理 Web.config 文件时会自动对该文件的内容进行解密。
因此,不需要任何附加步骤即可对已加密的配置设置进行解密,供其他 ASP.NET 功能使用或用于访问代码中的值。
程序中直接使用
ConfigurationManager.ConnectionStrings就可以获取你想要的配置项和值等等,大家自己Qucik Watch一下,自己看一下吧。这样就多说了。

只需要把-pe参数修改为-pd,就可以了。具体操作如下:
aspnet_regiis -pd "connectionStrings" -app "/EnConfig\WebApplication1"
操作成功信息:
Decrypting configuration section
Succeeded!

图1:设置web共享






以下是加密后的ConnectionString:
 
< connectionStrings  configProtectionProvider ="RsaProtectedConfigurationProvider" >
    
< EncryptedData  Type ="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns
="http://www.w3.org/2001/04/xmlenc#" >
      
< EncryptionMethod  Algorithm ="http://www.w3.org/2001/04/xmlenc#tripledes-cbc"   />
      
< KeyInfo  xmlns ="http://www.w3.org/2000/09/xmldsig#" >
        
< EncryptedKey  xmlns ="http://www.w3.org/2001/04/xmlenc#" >
          
< EncryptionMethod  Algorithm ="http://www.w3.org/2001/04/xmlenc#rsa-1_5"   />
          
< KeyInfo  xmlns ="http://www.w3.org/2000/09/xmldsig#" >
            
< KeyName > Rsa Key </ KeyName >
          
</ KeyInfo >
          
< CipherData >
            
< CipherValue > lDEPz9sfUaFP26qIsQC3wZd43xr/NOjE3CxcMitgKnnNoa9tLUUjSJVfsvBRnXyGHyKJ0+kIsGssiXfpDPM63cJkwDoZHVnRRYGp5vD3SWM2JZ3SGD3iKjRtnJpMYcqzOONkN61moPbhWW6szd85pNZzMxjEWQdHElC2W6wg520= </ CipherValue >
          
</ CipherData >
        
</ EncryptedKey >
      
</ KeyInfo >
      
< CipherData >
        
< CipherValue > bqKAbnOfFUUEUvbF4bfDeP5HNeW6EfH0A0H2nw4u/6knmeBqzaTFGxpxtMpcs1qQQGm2eJ4BajZpxhrIocOlo3J6ACr36OL/6EMlgkn5KdOb+WbceYMLXa96hoR8bXXVJDu11UoGBKGSdyGKTodE4zPHivXxwoY+TaDnB4FVy+ddSJrWmJCPRIXFcCPHO03l/bywpPDCyrrPZwCZI5Xqlq9z/Q99AtA8FwQY5BmVPvw= </ CipherValue >
      
</ CipherData >
    
</ EncryptedData >
  
</ connectionStrings >

图3:aspnet自动解密


如果加密后遇到现错误“Failed to decrypt using provider 'MyInsideProtectedDataProvider'. Error message from the provider: The RSA key container could not be opened.”。执行下面两个命令即可:

Cause

Inexistent RSA container or insufficient permissions on the RSA container

Resolution

Create new container and add identity with correct permissions. You may use the following commands:

\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe  -pc "NetFrameworkConfigurationKey" -exp
Creating RSA Key container...
Succeeded!

\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"

Restart IIS with command " iisreset".


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值