web.config 加密

作者:vkvi 来源:ITPOW(原创) 日期:2007-9-29

前面已经讲过在 web.config 中可以存储数据库连接语句(通常存于 <connectionString>),也可以存储 SQL 语句(通常存于<appSettings>),这样在我们的程序中就可以非常方便地调用,特别是 .NET Framework 2.0 中使用声明式数据绑定,更是需要将这些信息存储在 web.config 中。利用明文存储这些敏感信息是不明智的,这就需要加密。

利用 aspnet_regiis 对 web.config 加密

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pef connectionStrin
gs E:\wwwroot -prov DataProtectionConfigurationProvider

-pef 指定两个参数:

  • 这里 connectionStrings 是要进行加密的配置节,如果配置节不是根元素则就指定路径,如:父配置节/子配置节。

  • 这里 E:\wwwroot 是要加密的配置文件所在的物理目录。

-prov 表示使用哪个驱动来加密,一共有两个驱动可选,在类似于 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的位置,我们可以找到 machine.config 文件,在其 configProtectedData 配置节,我们可以看到这两个驱动的名称,以及默认的驱动是哪一个。这两个驱动是 RsaProtectedConfigurationProvider(类名 RsaProtectedConfigurationProvider)和 DataProtectionConfigurationProvider(类名 DpapiProtectedConfigurationProvider)。

  • RsaProtectedConfigurationProvider RSA 加密,公钥/私钥均存储在配置文件中,移植方便。

  • DataProtectionConfigurationProvider 使用 Windows 内置的加密服务,密钥由 LSASS.EXE 管理,无法移植。通过设置可以限定是只能某个帐户可以使用加密的数据,还是 Windows 中所有帐户均可使用。

你也可以用你自己的加密算法,具体请参见 MSDN 的实现受保护配置提供程序

打不开物理路径“D:\Web.config”的配置。失败

找不到对应的 web.config,通常是路径写错了,如果我们确信路径没错,请注意:我们只需要指定 web.config 所在的目录,不需要在路径中包含 web.config。

加密后,如何应用和人工解密?

应用上没有变化,在获取这些加密的配置节数据时会自动对其解密。

要修改加密后的配置节内容怎么办呢。三种方法:一是对未加密的 web.config 备份进行修改,然后再加密覆盖之;二是使用 -pdf(注意不是 -pef)进行解密(注意此时不能带 prov 参数和该参数的值),再修改,再加密。注意,要对 DataProtectionConfigurationProvider 加密的配置文件进行解密,只能在加密的机器上进行;三是利用 IIS 中集成的 ASP.NET 编辑,该编辑时采用的明文,但保存时自动确定是采用密文还是明文,非常方便。

加密后再次加密,会不会造成双重加密?

不会,加密后,再次加密,第二次加密会识别到已经加密了,不会重复加密。不过它可能会改变一些类似密钥的东西,所以看到的字符串和前一次加密的字符串不一样。

相关阅读

相关文章