在部署项目的时候,我们总是需要加密配置文件中的ConnectionStrings或者appSettings配置节,从而防止用户数据库被泄漏。.NET Framework使用提供程序模型来加密配置节,框架包含两个ProtectedConfigurationProvider:一个是RsaProtectedConfigurationProvider另一个DpapiProtectedConfigurationProvider. 前者是默认的提供程序,我们尽可能去使用该种,因为它支持导入\导出加密的密钥,换句话说,可以从一个web服务器移动配置节到另一个web服务器,例如可以在你开发的机子上加密配置节,然后将应用部署到产品服务器。
如果使用后者加密配置节,那么就不能在另一个web服务器解密配置节,如果希望在不同的服务器之间移动配置文件,那么应现在员服务器上解密,再在目标服务器上重新加密配置文件。
1.使用aspnet_regiis.exe工具加密配置节
对于加密web配置文件中一个配置节来说,这是最方便的手段,该工具位于
1 C:\Windows\Microsoft.NET\Framework\v2.0.50727
目录下
我们可以手工在cmd dos窗口中敲入路径使用该工具或者直接在开始菜单中找到Microsoft Visual Studio 2005-》Visual Studio Tools-》Visual Studio 2005 命令提示,打开该dos窗口,这里不需要输入aspnet_regiis.exe工具的路径
假如我们有个网站在D:\Projects\mywebsite中
我们需要加密该网站的webconfig的appSettings配置节的方法如下
1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"
以上我们使用的是绝对路径,当然也可以使用相对路径
1 aspnet_regiis -pef appSettings "D:\Projects\mywebsite"
-app表示指定应用程序的虚拟路径
再次打开该web.config,发现appSetting配置节已经加密了。
当然我们需要加密connectionStrings配置节只要加上面代码的 appSetting替换下就ok了
我们注意下 -pef(Protect Encrypt Filepath) 这个选项,它是用来加密指定路径下的web.config文件的指定配置节
当然还有解密啦....
我们可以使用-pdf选项解密配置节,还拿上面的例子
1 aspnet_regiis -pdf appSettings "D:\Projects\mywebsite"
虚拟路径
1 aspnet_regiis -pd appSettings -app /mywebsite
假设我们使用RsaProtectedConfigurationProvider加密配置文件,现在需要从一个服务器复制一个加密配置文件到另一个服务器,则必须复制加密配置文件的密钥到新的服务器,否则应用程序就不能在新服务器读取加密后的配置文件
默认情况下,存放密钥的容器在下面的文件夹下:
1 \Document and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
当然,你很有可能找不到该文件夹(o(∩_∩)o ),现在比如360的搬移打文件等工具,鬼知道,那些文件夹会不会移动到别的地方去了....慢慢找下
我的是在
1 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
在MachineKeys目录下会有一些数字和字母组成的系统文件,这就是我们想找的哈
我们还必须配置一个新的密钥容器,导入密钥容器到新服务器,需要依次完成下面几个步骤
1-创建一个新的密钥容器
1 aspnet_regiis -pc "SharedKeys" -exp
SharedKeys是新的密钥容器,-exp说明该容器的密钥可以导出
2-配置应用程序使用新的密钥容器
web.config:
1 <configuration> 2 <configProtectData defaultProvider="MyProtectedConfigurationProvider"> 3 <providers> 4 <add name="MyProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider" cspProviderName="" useMachineContainer="true" useOAEP="false" keyContainerName="SharedKeys"/> 5 </providers> 6 </configProtectedData> 7 </configuration>
3-导出SharedKeys容器中的密钥到一个keys.XML文件中
1 aspnet_regiis -px "SharedKeys" keys.xml -pri
4-把刚创建的keys.xml文件复制到目标服务器上,并导入密钥
1 aspnet_regiis -pi "SharedKeys" keys.xml
5-赋予asp.net应用程序访问密钥容器的权限
1 aspnet_regiis -pa "SharedKeys" "ASPNET"