machineKey 元素(ASP.NET 设置架构)

对算法、密钥进行配置,以便将其用于对 Forms 身份验证数据和视图状态数据进行加密、解密和验证,并将其用于进程外会话状态标识。

<machineKey 
  validationKey="AutoGenerate,IsolateApps" [String]
  decryptionKey="AutoGenerate,IsolateApps" [String]
  validation="HMACSHA256" [SHA1 | MD5 | 3DES | AES | HMACSHA256 | 
    HMACSHA384 | HMACSHA512 | alg:algorithm_name]
  decryption="Auto" [Auto | DES | 3DES | AES | alg:algorithm_name]
/>

特性和元素

以下几节描述了属性、子元素和父元素。

特性

特性

说明

decryption

可选的 String 特性。

指定用于加密和解密身份验证数据的算法。

此特性可以具有下列值之一:

  • Auto 指定 ASP.NET 将自动确定要使用的解密算法。 这是此特性的默认值为 。

  • AES  指定 ASP.NET 使用 AES (Rijndael) 算法来加密和解密数据。 AES 是默认算法,并且当该特性的值为 Auto 时会使用它。 此算法符合美国联邦信息处理标准 (FIPS)。

  • DES 指定 ASP.NET 使用数据加密标准 (DES) 算法来加密和解密数据。 此算法仅用于传统用途,并且只应用于要求与 ASP.NET 的早期版本兼容的情况。

  • 3DES  指定 ASP.NET 使用 TripleDES 算法 (3DES) 对数据进行加密和解密。 此算法仅用于传统用途,并且只应用于要求与 ASP.NET 的早期版本兼容的情况。

  • alg:algorithm_name  指定 ASP.NET 使用自定义算法对数据进行加密和解密。 必须在 SymmetricAlgorithm 派生的类中定义加密算法。 ASP.NET 调用 SymmetricAlgorithm.Create 方法并传入此处指定的算法的名称。

decryptionKey

必选的 String 特性。

指定用于对数据进行加密和解密的密钥或者生成该密钥的进程。 当加密视图状态时,该特性用于 Forms 身份验证加密和解密以及视图状态加密。

此特性可以具有下列值之一:

  • AutoGenerate, IsolateApps 指定自动生成该密钥。 这是默认值。 AutoGenerate 修饰符指定 ASP.NET 生成随机密钥并将其存储在本地安全机构 (LSA) 中。 IsolateApps 修饰符指定 ASP.NET 使用应用程序 ID 为每个应用程序生成唯一的加密密钥。

  • 键值  指定手动分配的键。 该 decryptionKey 值必须手动设置为十六进制字符串,以确保 Web 场中的所有服务器上的配置保持一致。 关键应该是 DES 加密长度应为 64 位 (16 个十六进制字符)或 3DES 应为 192 位(48 个十六进制字符)。 对于 AES 时,密钥长度可以是 128 位 (32 个字符)、192 位 (48 个字符),也可以是 256 位 (64 个字符)。 最长密钥提供了最多 security.Random 密匙,可以通过手动使用 RNGCryptoServiceProvider 类来生成。 更多信息,请参见 How To: Configure MachineKey in ASP.NET 2.0.

有关更多信息,请参见 DecryptionKey

validation

必选的 MachineKeyValidation 特性。

指定使用的哈希算法来验证数据。

默认情况下,视图状态将作为 Base-64 编码字符串传输。 虽然编码的数据看起来是不可理解的,但基 64 编码未提供安全性,因为它易于被解码。 如果将敏感数据存储到查看状态,则除了验证敏感数据,还可指定 ASP.NET 加密查看状态的数据。 可为 Web 应用程序所有页面或指定页面指定视图状态加密。 关于此选项的信息,请参见 ViewStateEncryptionModeRegisterRequiresViewStateEncryption()

如果您要使用视图状态加密,请将此特性设置为 AES。 在这种情况下,decryptionKey 值将用于加密视图状态数据,而 ASP.NET 将使用 HMACSHA1 哈希算法进行数据验证。

此特性可以具有下列值之一。

  • AES  指定 ASP.NET 使用 AES (Rijndael) 算法在加密查看状态时对数据进行加密和解密。 如果为 validation 特性指定了此选项,则将使用 HMACSHA1 算法进行验证。

  • MD5  指定 ASP.NET 使用 Message Digest 5 (MD5) 哈希算法来验证数据。 此算法仅用于传统用途,并且只应用于要求与 ASP.NET 的早期版本兼容的情况。

  • SHA1  指定 ASP.NET 使用 HMACSHA1 哈希算法来验证数据。 只应在需要将此属性设置为 AES 以支持试图状态加密时才使用此算法。 否则,请使用 HMACSHA256、HMACSHA384 或 HMACSHA512。

  • 3DES  指定 ASP.NET 使用 TripleDES (3DES) 算法在加密查看状态时对数据进行加密和解密。 如果为 validation 特性指定了此选项,则将使用 HMACSHA1 算法进行验证。 此算法仅用于传统用途,并且只应用于要求与 ASP.NET 的早期版本兼容的情况。

  • HMACSHA256  指定 ASP.NET 使用 HMACSHA256 哈希算法来验证数据。 这是默认值。 此算法符合美国联邦信息处理标准 (FIPS)。

  • HMACSHA384 指定 ASP.NET 使用 HMACSHA384 哈希算法来验证数据。 此选项对需要比 HMACSHA256 算法提供的安全性更高的安全性的应用程序可用。 此算法符合美国联邦信息处理标准 (FIPS)。

  • HMACSHA512  指定 ASP.NET 使用 HMACSHA512 哈希算法来验证数据。 此选项对需要比 HMACSHA384 算法提供的安全性更高的安全性的应用程序可用。 此算法符合美国联邦信息处理标准 (FIPS)。

  • alg:algorithm_name  指定 ASP.NET 使用自定义算法。 谓词 alg: 之后是从 KeyedHashAlgorithm 中派生出来的类的名称。 ASP.NET 调用 Create() 方法并传入此处指定的算法的名称。

validationKey

必选的 String 特性。

指定验证数据的密钥,或生成密钥的过程。 validationKey 值也用于生成进程外的应用程序特定的会话 ID,以确保会话状态变量在会话之间是相互隔离的。

此特性可以具有下列值之一:

  • AutoGenerate, IsolateApps 指定自动生成该密钥。 这是默认值。 AutoGenerate 修饰符指定 ASP.NET 生成随机密钥并将其存储在本地安全机构 (LSA) 中。 IsolateApps 修饰符指定 ASP.NET 使用应用程序 ID 为每个应用程序生成唯一的加密密钥。

  • 键值  指定手动分配的键。 该 validationKey 值必须手动设置为十六进制字符串,以确保配置在整个网络场中的所有服务器保持一致。 密钥的长度取决于所使用的哈希算法:

    • AES 需要一个 256 位项(64 个十六进制字母)。

    • MD5 需要 128 位密钥(32 个十六进制字符)。

    • SHA1 需要有一个 160 位的键(40 个 16 进制的字母)。

    • 3DES 需要 192 位密钥(48 个十六进制字符)。

    • HMACSHA256 需要有一个 256 位的键(64 个十六进制字母)。

    • HMACSHA384 需要有一个 384 位的键(96 个十六进制字母)。

    • HMACSHA512 需要有一个512位的键(128 个十六进制字母)。

    可以通过使用 RNGCryptoServiceProvider 类手动生成随机密钥。 更多信息,请参见 How To: Configure MachineKey in ASP.NET 2.0. 本主题未列出 HMACSHA256、HMACSHA384 或 HMACSHA512 算法。 但是,只要您指定正确的密钥长度,这些算法的进程仍然有效。

有关更多信息,请参见 ValidationKey

子元素

无。

父元素

元素

说明

configuration

指定公共语言运行时和 .NET Framework 应用程序所使用的每个配置文件中均需要的根元素。

system.web

指定配置文件中 ASP.NET 配置设置的根元素,并且包含各种配置元素,这些元素配置 ASP.NET Web 应用程序并控制这些应用程序的行为方式。

备注

下面的代码示例演示如何将 validationKey 和 decryptionKey 特性都设置为 AutoGenerate。 并且,指定了 isolateApps 值,以便为服务器上的每个应用程序生成一个唯一的密钥。

<machineKey 
    validationKey="AutoGenerate,IsolateApps" 
    decryptionKey="AutoGenerate,IsolateApps" 
/>

以下代码示例演示如何将 validationKey 属性和 decryptionKey 属性设置为手动生成的随机值。 将HMACSHA256 哈希算法的 validationKey 属性设置为 256 位长的密匙,decryptionKey 属性也设置为 256 位长的密钥,这是对 AES 加密算法可能的最长密匙。 以上均仅用作示例,不应在应用程序中使用。

<machineKey 
    validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F" 
    decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" 
/>

请参见

任务

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

如何:使用位置设置配置特定目录

如何:锁定 ASP.NET 配置设置

参考

system.web 元素(ASP.NET 设置架构)

configuration 元素(常规设置架构)

System.Configuration

System.Web.Configuration

MachineKeySection

MachineKey

概念

跨应用程序进行 Forms 身份验证

保护角色

保证成员资格的安全

保证配置文件属性的安全

保护会话状态

ASP.NET 配置文件层次结构和继承

保证 ASP.NET 配置的安全

ASP.NET 配置方案

其他资源

常规配置设置 (ASP.NET)

ASP.NET 配置设置

ASP.NET 网站管理

ASP.NET 配置 API