计算机密钥有助于保护 Forms 身份验证 Cookie 数据和页级视图状态数据。它们还用于验证进程外会话状态标识。ASP.NET 使用以下类型的计算机密钥:
- 验证密钥,用于计算消息验证代码 (MAC) 以确认数据的完整性。此密钥附加到 Forms 身份验证 Cookie 或特定页的视图状态。
- 解密密钥,用于对 Forms 身份验证票证和视图状态进行加密和解密。
(一)生成计算机密钥
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,右键单击"计算机密钥",然后单击"打开功能"。
3. 在"计算机密钥"页上,从"加密方法"下拉列表中选择一种加密方法。默认加密方法为"SHA1"。
4. 从"解密方法"下拉列表中选择一种解密方法。默认解密方法为"自动"。
5. 此外,也可以配置验证密钥和解密密钥的设置。
6. 在"操作"窗格中,单击"生成密钥",然后单击"应用"。
(二)选择计算机密钥加密方法
通过选择良好的计算机密钥加密方法,可以增强你创建的计算机密钥的安全性。
有下列加密方法可供使用:
- 高级加密标准 (AES) 实现起来相对容易一些,并且需要很少的内存。AES 的密钥大小为 128、192 或 256 位。此方法使用相同的私钥对数据进行加密和解密,而公钥方法必须使用成对的密钥。
- Message Digest 5 (MD5) 用于对应用程序(例如邮件)进行数字签名。此方法将产生 128 位的哈希,这是一种压缩格式的原始数据。MD5 可以提供一定的保护,考试,大提示以防止遭受计算机病毒和某些程序(看上去像是无害的应用程序,而实际上具有破坏性)的攻击。这些程序称作特洛伊木马。
- 安全哈希算法 (SHA1) 是默认的加密方法,它被认为比 MD5 更加安全,因为它产生 160 位的消息摘要。应该尽可能使用 SHA1 加密。
- 三重数据加密标准 (TripleDES) 与数据加密标准 (DES) 稍有不同。它的速度比普通 DES 慢三倍,但是它更加安全,因为它的密钥大小为 192 位。如果性能不是主要考虑的问题,请考虑使用 TripleDES。
具体实现步骤如下:
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页上,从"加密方法"下拉列表中选择一种加密方法。默认加密方法为"SHA1"。
4. 在"操作"窗格中,单击"应用"。
(三)选择计算机密钥解密方法
与加密方法类似,执行如下步骤即可:
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页上,从"解密方法"下拉列表中选择一种解密方法。默认解密方法为"自动"。
4. 在"操作"窗格中,单击"应用"。
(四)在运行时生成验证密钥
如果你希望 ASP.NET 创建随机密钥并将其存储在本地安全机构 (LSA) 中,就需要在运行时生成验证密钥。默认情况下,将在运行时生成验证密钥。此密钥可确保 Forms 身份验证票证不会被篡改且已经加密,并且视图状态也不会被篡改。通过在运行时生成验证密钥,还可以保证服务器在处理数据时能够检测到对视图状态或身份验证票证所做的全部修改,而无论修改是在客户端计算机上进行的,还是通过网络进行的。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"运行时自动生成"复选框,然后在"操作"窗格中单击"应用"。
(五)为每个应用程序生成唯一的验证密钥
当你希望 ASP.NET 创建随机密钥时,可以为每个应用程序生成唯一的验证密钥。本地安全机构 (LSA) 使用每个应用程序的应用程序 ID 来创建此密钥。LSA 然后会将此密钥存储在 Web 服务器上。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"为每个应用程序生成一个唯一密钥"复选框,然后在"操作"窗格中单击"应用"。
(六)在运行时生成解密密钥
如我们希望 ASP.NET 生成随机密钥并将其存储在本地安全机构 (LSA) 中,就需要在运行时生成解密密钥。默认情况下,在运行时生成解密密钥。此密钥可确保 Forms 身份验证票证不会被篡改且已经加密,并且视图状态也不会被篡改。通过在运行时生成解密密钥,还可以保证服务器在处理数据时能够检测到对视图状态或身份验证票证所做的全部修改,而无论修改是在客户端计算机上进行的,还是通过网络进行的。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"解密密钥"下,选中"运行时自动生成"复选框,然后在"操作"窗格中单击"应用"。
(七)为每个应用程序生成唯一的验证密钥
当希望 ASP.NET 创建随机密钥时,可以为每个应用程序生成唯一的验证密钥。本地安全机构 (LSA) 使用每个应用程序的应用程序 ID 来创建此密钥。LSA 然后会将此密钥存储在 Web 服务器上。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 在"计算机密钥"页的"验证密钥"下,选中"为每个应用程序生成一个唯一密钥"复选框,然后在"操作"窗格中单击"应用"。
(八)为 Web 场生成计算机密钥
若要在 Web 场配置中的多台计算机之间使用 Forms 身份验证,必须手动生成特定的验证和解密密钥值,并在该 Web 场中的所有计算机上使用这些值。
1. 打开 IIS 管理器,然后导航至要管理的级别。
2. 在"功能视图"中,双击"计算机密钥"。
3. 若要为 Web 场生成特定的验证和解密密钥值,请在"计算机密钥"页上,清除验证密钥和解密密钥的"为每个应用程序生成一个唯一密钥",再清除"运行时自动生成",然后在"操作"窗格中单击"生成密钥"以创建特定的密钥值。
4. 在"操作"窗格中,单击"应用"。