Machine.config 文件中节点<machineKey>的强随机生成
Machine.config 文件中节点<machineKey>的强随机生成
<machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥。ASP.NET自动使用它来保护表单验证Cookie,你也可以将它用于受保护的视图状态数据。同时,这个密钥还用于验证进程外的会话状态提供程序。
如果你在使用Web集群并在多台计算机上运行同一个应用程序,如果对页面的请求由一台计算机处理,而页面回发又由另一台计算机处理,第二个服务器就不能解密来自第一台服务器的视图状态和表单Cookie。这个问题之所以会发生,是因为两台服务器使用了不同的密钥。
要解决这个问题,你必须显式的在machine.config文件中定义这个密钥:
<machineKey validationKey = "6efa......." decryptionKey = "ACE09876A7......." />
其中,validationKey 的值可以是48到128个字符长,强烈建议使用可用的最长密钥。decryptionKey 的值可以是16到48字符长,建议使用48字符长。
自己去手动创建验证密钥和解密密钥并没有多大的意义。如果你这么做的话,它们可能随机性不足,这就可能允许某种类型的攻击。更好的办法是使用代码和.NET加密类(System.Security.Cryptography 命名空间)生成随机密钥,代码如下:
using System;
using System.Security.Cryptography;
using System.Text;
/// <summary>
/// 各类工具
/// </summary>
public class Tools
{
/// <summary>
/// 使用加密服务提供程序实现加密生成随机数
/// </summary>
/// <param name="length"></param>
/// <returns>16进制格式字符串</returns>
public static string CreateMachineKey(int length)
{
// 要返回的字符格式为16进制,byte最大值255
// 需要2个16进制数保存1个byte,因此除2
byte[] random = new byte[length / 2];
// 使用加密服务提供程序 (CSP) 提供的实现来实现加密随机数生成器 (RNG)
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
// 用经过加密的强随机值序列填充字节数组
rng.GetBytes(random);
StringBuilder machineKey = new StringBuilder(length);
for (int i = 0; i < random.Length; i++)
{
machineKey.Append(string.Format("{0:X2}", random[i]));
}
return machineKey.ToString();
}
}
调用:
string decryptionKey = Tools.CreateMachineKey(48);
string validationKey = Tools.CreateMachineKey(128);
使用这个方法可以创建需要的密钥,然后可以复制这些信息并粘贴到Web集群中每台计算机的machine.config文件中,这要比手工创建密钥更安全,更便捷。
Machine.config 文件中节点<machineKey>的强随机生成的更多相关文章
- 配置文件——节点<machineKey>的作用,强随机生成
<machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥.ASP.NET自动使用它来保护表单验证Cookie,你也可以将它用于受保护的视图状态数据.同时,这个密 ...
- c# 根据配置文件路径,设置和获取config文件 appSettings 节点值
/// <summary> /// 获取编译后的主配置文件节点值 /// </summary> /// <param name="key">&l ...
- web.config文件中配置数据库连接的两种方式
web.config文件中配置数据库连接的两种方式 标签: 数据库webconfig 2015-04-28 18:18 31590人阅读 评论(1)收藏举报 分类: 数据库(74) 在网站开发 ...
- 转载:轻量级Config文件AppSettings节点编辑帮助类
using System.Configuration; using System.Windows.Forms; namespace Allyn.Common { public class XmlHep ...
- 轻量级Config文件AppSettings节点编辑帮助类
using System.Configuration; using System.Windows.Forms; namespace Allyn.Common { public class XmlHep ...
- 利用HttpWebRequest模拟表单提交 JQuery 的一个轻量级 Guid 字符串拓展插件. 轻量级Config文件AppSettings节点编辑帮助类
利用HttpWebRequest模拟表单提交 1 using System; 2 using System.Collections.Specialized; 3 using System.IO; ...
- 如何在web.config文件中配置Session变量的生命周期
实例说明:在网上购物商城中,为了维护在线购物环境,一般只有注册会员才可以购买商品.实现购物功能时,先通过Session变量记录会员的登录名,然后在购买商品页面通过判断会员是否登录确定其能否购买商品. ...
- c# 如何使用DLL的config文件中的信息
我知道用c#编写的exe程序可以读取config文件中的配置信息,比如Test.exe,可以在与Test.exe相同目录下放置一个config文件:Test.exe.config,用System.Co ...
- 在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据)
原文:在Web.Config文件中使用configSource,避免动态修改web.config导致asp.net重启(另添加一个Config文件用于管理用户数据) 我们都知道,在asp.net中修改 ...
随机推荐
- 2.3 i++/i--与++i/--i的运算
一.i++/i--: i先参与运算,运算完成后自加/减1: public class Test{ public static void main(String[] args){ // [1] ; i+ ...
- C++中const的用法
1.const修饰普通变量和指针 (1).const修饰普通变量 其写法有2种:a.const type value; b.type const value; 这两种写法本质上是一样的.其含义是: ...
- 使用feign出现 java.lang.IllegalStateException: Service id not legal hostname
检查spring. application.name是否使用了_
- Jenkins可持续集成项目搭建——配置邮件
1.系统管理->系统设置 (1)填写系统管理员邮件地址 (2)填写邮箱配置.发件人邮箱.收件人邮箱 注:1>发件人邮箱地址必须和系统管理员邮箱地址一致 2> 部分邮箱配置输入的不是登 ...
- AJAX实现注册
先添加点击事件: <input type="button" id="submittt" value="注册"/> 展示提示消息: ...
- 导出excel,并将数据返回给前端(包含权限判断)
一.先写导出按钮接口 1.此接口对用户权限进行判断 2.此接口将前端的参数组合拼凑到下一个接口的url中去,用于条件筛选 3.用户有权限的情况下将用户的权限信息保存到redis中去,并将token写到 ...
- edgedb 基本试用
环境准备 使用docker-compose 运行 docker-compose 文件 version: "3" services: db: image: edgedb/edgedb ...
- 后台管理系统好用的UI框架
https://www.layui.com/demo/form.html
- day05 模块学习
目录 1.模块简介 2.collections模块常见方法 3.random模块 4.time模块 5.pickle模块 6.json模块 7.os模块 8.sys模块 9.正则表达式 10.re模块 ...
- oracle11g 数据库修改 UTF8字符集
步骤一:执行以下命令 sqlplus "/as sysdba" conn /as sysdba; shutdown immediate; startup mount; ALTER ...