演練:使用受保護(hù)的配置加密配置信息
使用受保護(hù)配置,可以對某個 ASP.NET 應(yīng)用程序的 Web.config 文件的節(jié)進(jìn)行加密,以保護(hù)由該應(yīng)用程序使用的敏感信息。即使攻擊者獲取了對 Web.config 文件的訪問,這也可以使攻擊者難以獲取對敏感信息的訪問,從而改進(jìn)應(yīng)用程序的安全性。ASP.NET 包括兩個可用于對 Web.config 文件的節(jié)進(jìn)行加密的受保護(hù)配置提供程序:RSAProtectedConfigurationProvider(使用 RSACryptoServiceProvider 來加密配置節(jié))和 DPAPIProtectedConfigurationProvider(使用 Windows 數(shù)據(jù)保護(hù) API (DPAPI) 來加密配置節(jié))。
在某些情況下,您可能需要使用 RSA 或 DPAPI 提供程序可用的算法以外的算法來加密信息。在這種情況下,您可以構(gòu)建自定義的受保護(hù)配置提供程序以供 ASP.NET 使用。
受保護(hù)配置提供程序所需的類若要實(shí)現(xiàn)受保護(hù)配置提供程序,請創(chuàng)建一個繼承 System.Configuration 命名空間的 ProtectedConfigurationProvider 抽象類的類。ProtectedConfigurationProvider 抽象類繼承 System.Configuration.Provider 命令空間的 ProviderBase 抽象類,因此還必須實(shí)現(xiàn) ProviderBase 類必需的成員。以下各表列出了必須從 ProviderBase 和 ProtectedConfigurationProvider 抽象類實(shí)現(xiàn)的屬性和方法。若要查看每個成員的實(shí)現(xiàn),請參見如何:生成并運(yùn)行受保護(hù)的配置提供程序示例。
必需的 ProviderBase 成員Initialize 方法
為提供程序?qū)嵗O(shè)置屬性值,包括在應(yīng)用程序配置中提供的實(shí)現(xiàn)特定的值和選項(xiàng)。
接受提供程序的名稱和配置設(shè)置的 NameValueCollection 作為輸入。
必需的 ProtectedConfigurationProvider 成員Encrypt 方法
執(zhí)行加密。接受包含要加密的配置節(jié)的 XmlNode 對象作為輸入。例如,如果要加密的配置節(jié)是 connectionStrings 節(jié),則 XmlNode 對象表示類似于下面的示例的 XML 數(shù)據(jù)。
復(fù)制代碼Encrypt 方法對 XmlNode 對象的 OuterXml 值進(jìn)行加密,并返回 EncryptedData 元素是根元素的 XmlNode 對象,如下面的示例所示:
復(fù)制代碼EncryptedData 元素的內(nèi)容格式由實(shí)現(xiàn)功能確定。在對該元素進(jìn)行解密時(shí),ASP.NET 會將 XmlNode 對象傳遞到 Decrypt 方法,其中 EncryptedData 元素是根元素。
Decrypt 方法
執(zhí)行解密。接受包含加密配置節(jié)的 EncryptedData 元素的 XmlNode 對象作為輸入。例如,如果 connectionStrings 節(jié)是已加密的配置節(jié),則 XmlNode 對象所表示的 XML 數(shù)據(jù)類似于下面的示例中突出顯示的 XML。
復(fù)制代碼Decrypt 方法對 XmlNode 對象的內(nèi)容進(jìn)行解密,并返回一個 XmlNode 對象,該對象表示 EncryptedDataXmlNode 對象的已解密內(nèi)容。例如,如果 connectionStrings 節(jié)已進(jìn)行加密,則 Decrypt 返回一個 XmlNode 對象,該對象包含類似于下面的示例的 XML 數(shù)據(jù)。
復(fù)制代碼示例提供程序
有關(guān)使用 TripleDESCryptoServiceProvider 類對 Web.config 文件的節(jié)進(jìn)行加密和解密的自定義受保護(hù)配置提供程序的示例,請參見如何:生成并運(yùn)行受保護(hù)的配置提供程序示例。