现在很多系统都采用XML格式的文件保存配置信息,这些信息中很多是敏感数据,一旦被黑客获取将直接威胁系统的安全。本节将从配置方法到保护方法,系统的讲解如何保护系统配置文件。
.NET技术提供了两种类库保护配置文件:
Windows数据保护提供程序DataProtectionConfigurationProvider使用Windows内置的密码学技术来加解密配置节。默认情况下,这个提供程序使用本机的密钥。
RSA保护的配置提供程序RsaProtectedConfigurationProvide使用RSA公钥对配置节加密。开发人员需要创建密钥容器,用于存储加解密配置信息的公钥和私钥。
对于Web系统开发,建议使用RsaProtectedConfigurationProvider来技术保护配置文件。因为它能够在多台服务器上使用同一个加密配置文件,导出用于数据加密的加密密钥,并在另一台服务器上导入。
上述两个类库均需要开发人员在Machine.config配置其属性,主要包括名称、描述和保护类型。
Machine.config相关配置节代码如下:
下面的例子是加密Web应用程序配置文件(如Web.config文件)中的敏感信息(包括用户名和密码、数据库连接字符串和加密密钥),对配置信息进行加密后,即使攻击者获取了对配置文件的访问,也难以获取对敏感信息的访问,从而改进应用程序的安全性。
例如,未加密的配置文件中可能包含一个指定用于连接到数据库的连接字符串的节,如下面的实例所示:
对保存连接字符串值的配置文件进行加密,在对页进行请求时,.NET框架对连接字符串信息进行解密,并使其可供应用程序使用。
加密后的XML代码如下面的示例所示:
本小节详细介绍如何利用类DpapiProtectedConfigurationProvider实施配置文件的加解密。它使用Windows数据保护API(DPAPI)对数据进行加密和解密。DPAPIProtectedConfigurationProvide类提供实例所需要的type和description\属性,以及keyName。
表4-1所示为DpapiProtectedConfigurationProvider类的配置选项:
表4-1 DpapiProtectedConfigurationProvider的配置选项
下面的实例演示如何使用标准的DpapiProtectedConfigurationProvider保护配置节或取消配置节保护。
该实例代码通过命名空间Configuration读取和写配置文件,其中加密配置节的方法是ProtectConfiguration,该方法的主要功能是读取数据库串的配置节ConnectionStrings,并设置DpapiProtectedConfigurationProvider加密前所需要的名称属性。
解密方法是UnProtectConfiguration,实现加密配置节信息的读取并且还原密文信息。该实例的主函数名称为Main,用来调用加解密方法并且在控制台输出执行结果。
利用DpapiProtectedConfigurationProvider类进行加解密的实例代码如下:
加密前的XML配置节代码如下:
加密后的XML配置节XML代码如下:
本小节详细介绍如何利用类RsaProtectedConfigurationProvider实施配置文件的加解密,该类使用RSA加密算法对数据进行加密和解密。
RsaProtectedConfigurationProvider类提供实例所需要的type和description属性。表4-2所示为RsaProtectedConfigurationProvider的配置选项。
表4-2 RsaProtectedConfigurationProvider的配置选项
RsaProtectedConfigurationProvider类提供方法以加密存储在配置文件中的敏感信息,这有助于防止未经授权的访问。通过声明该提供程序并在配置文件中进行相应的设置,可使用内置的RsaProtectedConfigurationProvider。
下面的实例说明如何使用标准RsaProtectedConfigurationProvider类来保护或取消保护配置节。实例代码包括3个方法:ProtectConfiguration用于加密XML配置节,UnProtectConfiguration用于解密XML配置节,Main用于执行主函数。
实例代码代码如下: