如何:生成并运行受保护的配置提供程序示例

更新:2007 年 11 月

本节中的主题包括示例受保护配置提供程序的代码。示例提供程序使用 TripleDESCryptoServiceProvider 类对 Web.config 文件中的配置节进行加密和解密。

本主题说明如何生成示例,以及如何配置 ASP.NET 应用程序来使用示例提供程序。示例受保护配置提供程序已在 Visual Basic 和 C# 中提供,可以在受保护配置提供程序实现示例中找到。

生成示例提供程序

必须使用 Aspnet_regiis.exe 工具对 Web.config 文件节进行加密。解密时可以显式使用 Aspnet_regiis.exe 工具,或者在运行时由 ASP.NET 自动解密。因此,必须生成既可用于 Aspnet_regiis.exe 工具又可用于 ASP.NET 的示例提供程序类型。通过使用强名称编译提供程序,然后将编译好的提供程序放在全局程序集缓存 (GAC) 中,这很容易实现。

33ws57y0.alert_note(zh-cn,VS.90).gif说明:

在安装 Windows 软件开发工具包 (SDK) 时提供了强名称工具 (Sn.exe) 和全局程序集缓存工具 (Gacutil.exe)。有关更多信息,请参见强名称工具 (Sn.exe)全局程序集缓存工具 (Gacutil.exe)

生成示例提供程序

  1. 在 Windows 命令行下运行下面的命令:

    Sn.exe -k keys.snk
    

    它生成一个强名称密钥对。

    33ws57y0.alert_note(zh-cn,VS.90).gif说明:

    如果您不能执行该命令,您必须先将 .NET Framework 路径添加到 PATH 变量,然后才能运行该命令。在 Windows 中,右击“我的电脑”,单击“属性”,单击“高级”选项卡,然后单击“环境变量”按钮。在“系统变量”列表中,双击 Path 变量。在“变量值”文本框中,将一个分号 (;) 添加到文本框中的现有值的末尾,然后键入 .NET Framework 的安装路径。.NET Framework 通常安装在位于 \Microsoft.NET\Framework\版本号的 Windows 安装文件夹中。

  2. 创建名为 TripleDESProtectedConfigurationProvider 程序文件(根据使用的编程语言,文件扩展名为 .vb 或 .cs),然后将受保护配置提供程序实现示例 中的示例提供程序代码复制到该程序文件中。

  3. 对提供程序示例代码进行编译,然后使用下面的命令给生成的程序集指定强名称密钥:

    vbc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.vb /r:System.Configuration.dll /keyfile:keys.snk
    
    csc /out:TripleDESProtectedConfigurationProvider.dll /t:library TripleDESProtectedConfigurationProvider.cs /r:System.Configuration.dll /keyfile:keys.snk
    
  4. 使用下面的命令行命令将程序集安装在全局程序集缓存中:

    gacutil.exe -i TripleDESProtectedConfigurationProvider.dll
    
    33ws57y0.alert_note(zh-cn,VS.90).gif说明:

    如果需要从 GAC 中移除程序集,则可以使用 Gacutil.exe 工具以及下面的命令:

    gacutil.exe -u TripleDESProtectedConfigurationProvider
    

创建和存储加密密钥

在示例 TripleDES 受保护配置提供程序中,使用存储在文本文件中的一个十六进制字符串加密密钥对配置节进行加密和解密。您可以使用示例提供程序中包括的代码创建密钥文件。在密钥文件中,密钥存储在文件的第一行,向量 (IV) 存储在第二行,如下面的示例所示:

EBBCB17E444EBB9EA2EA7EE3E0FD9E108C6E75A90101D017
8C979426981FD2A6

创建密钥文件后,应将它存储在服务器的一个安全位置,然后将密钥文件的访问权限限制在 ASP.NET 应用程序标识、SYSTEM 帐户和管理员范围内。这一方面可以防止密钥遭到攻击者的访问,另一方面也可以避免使您的加密变得无用。

创建加密密钥

  1. 创建名为 CreateKey 的控制台应用程序。

  2. 复制下面的代码当作应用程序的主模块。

    Imports System
    Imports Samples.AspNet.ProtectedConfiguration
    
    Public Class CreateKey
        Public Shared Sub Main(args() As String)
        Dim filePath As String = args(0)
        Dim provider As TripleDESProtectedConfigurationProvider = _
            New TripleDESProtectedConfigurationProvider()
        provider.CreateKey(filePath)
        Console.WriteLine("New TripleDES key written to '{0}'", filePath)
      End Sub
    End Class
    
    using System;
    using Samples.AspNet.ProtectedConfiguration;
    public class CreateKey
    {
        public static void Main(string[] args)
        {
            string filePath = args[0];
            TripleDESProtectedConfigurationProvider provider = 
                new TripleDESProtectedConfigurationProvider();
            provider.CreateKey(filePath);
            Console.WriteLine("New TripleDES Key written to '{0}'", filePath);
        }
    }
    

    该示例受保护配置提供程序中包括一个公共 CreateKey 方法,该方法将文件路径作为输入,并生成新的密钥,然后将新密钥写入指定的文件。控制台应用程序中的代码创建一个受保护配置提供程序的实例并调用它的 CreateKey 方法。该代码将文件路径当作命令行参数,然后在指定位置创建新的密钥文件。

  3. 在 Windows 命令行下,使用类似下面的语法运行控制台应用程序:

    CreateKey "c:\WebSites\SampleApplication\App_Data\Keys.txt"
    

在 ASP.NET 应用程序中使用示例提供程序

编译提供程序并创建加密密钥后,就可以配置 ASP.NET 应用程序使用提供程序。

在 ASP.NET 应用程序中使用示例提供程序

  1. 打开网站的 Web.config 文件。如果应用程序没有 Web.config 文件,请在网站的根文件夹下创建一个名为 Web.config 的文本文件,然后添加下面的元素:

    <?xml version="1.0"?>
    <configuration>
      <system.web>
    
      </system.web>
    </configuration>
    
  2. 在 configuration 节(作为 system.web 元素的对等项)中添加下面突出显示的元素:

    <configuration>
       <configProtectedData>     <providers>       <add name="TripleDESProvider"       type="Samples.AspNet.ProtectedConfiguration.TripleDESProtectedConfigurationProvider,                  TripleDESProtectedConfigurationProvider,                  Version=0.0.0.0, CultureInfo=neutral,                  PublicKeyToken=a5a9eb4fc5306403,                  processorArchitecture=MSIL"            keyFilePath="c:\WebSites\SampleApplication\App_Data\Keys.txt" />     </providers>   </configProtectedData>
    </configuration>
    
    33ws57y0.alert_note(zh-cn,VS.90).gif说明:

    请更改 keyFilePath 属性的值,使其与存储早先创建的密钥文件的位置一致。

  3. 在 configuration 节中,添加 <connectionStrings> 节和一个或多个连接字符串。

    下面的示例显示的 connectionStrings 节中包含 SQL Server Northwind 样例数据库的连接字符串。SQL Server 实例名假设为 SampleSQLServer。

    <connectionStrings>
      <add name="NorthwindConnectionString" 
        connectionString="Data Source=SampleSQLServer;Initial Catalog=Northwind;Persist Security Info=True;" Integrated Security=SSPI;"
        providerName="System.Data.SqlClient" />
    </connectionStrings>
    
    33ws57y0.alert_note(zh-cn,VS.90).gif说明:

    请更改 connectionString 值以包含要使用的 SQL Server 数据库连接信息。

  4. 保存文件并将其关闭。

  5. 在 Windows 命令行下,运行下面的命令对 Web.config 文件的 connectionStrings 节进行加密:

    aspnet_regiis.exe -pe "connectionStrings" -app "/SampleApplication" -prov "TripleDESProvider"
    
    33ws57y0.alert_note(zh-cn,VS.90).gif说明:

    对于 SampleApplication,请替换要测试加密的 Web 应用程序的名称。

  6. 打开 Web.config 文件,注意连接字符串已经过加密。

  7. 在 Web 应用程序中,使用已加密的连接字符串。

    例如,添加一个 SqlDataSource 控件并将其 ConnectionString 属性设置为“NorthwindConnectionString”,如下面的示例所示:

    <asp:SqlDataSource ID="SqlDataSource1" 
      runat="server" 
      ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
      SelectCommand="SELECT ProductName FROM Products">
    </asp:SqlDataSource>
    
  8. 将类似 GridView 的控件绑定到 SqlDataSource 控件。

  9. 运行该页。

    注意数据显示与您的要求一样。ASP.NET 已在运行时对连接字符串进行解密,然后才使用它连接到 Northwind 数据库。

请参见

概念

实现受保护配置提供程序

其他资源

使用受保护的配置加密配置信息