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文件中,这要比手工创建密钥更安全,更便捷。

posted on 2015-04-23 16:16 风暴烈酒辰 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/Shadow3627/p/4450884.html

Machine.config 文件中节点machineKey的强随机生成相关推荐

  1. C#对App.config文件或者web.config文件中节点的操作类

    //============================================== //        FileName: ConfigManager //        Descrip ...

  2. 配置文件——节点machineKey的作用,强随机生成

    <machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥.ASP.NET自动使用它来保护表单验证Cookie,你也可以将它用于受保护的视图状态数据.同时,这个密 ...

  3. ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法

    ASP.NET一个网站内存放多个config文件(Web.Config文件中configSource 的用法) 2011年08月10日 星期三 上午 11:41 每个网站里都会有一个web.confi ...

  4. 读取config文件中的键值

    新建个config文件 <?xml version="1.0" encoding="utf-8"?><!-- 注意: 除了手动编辑此文件以外, ...

  5. Web.config文件中的location元素

    在Web.config文件中使用<location>元素可以在同一个配置文件中指定多个设定组,使用<location>元素的path属性可以指定设定应该被应用到子目录或文件. ...

  6. remoting 突然出现 服务器遇到内部错误。有关更多信息,请关闭服务器的 .config 文件中的 customErrors。

    在使用C#的Remoting技术开发软件的时候,如果服务端与客户端都在同一台 电脑 上,客户端能够成功获取服务端的错误. 但如果服务端与客户端在二台电脑上的时候,通常客户端获取服务端内部错误的时候,只 ...

  7. 【转】 asp.net从视频文件中抓取一桢并生成图像文件的方法 实现多语言本地化应用程序 自动返回上次请求页面...

    asp.net从视频文件中抓取一桢并生成图像文件的方法 http://www.bianceng.cn/webkf/aspx/201012/21428.htm WebUIValidation.js ht ...

  8. Spring基础——在 Spring Config 文件中基于 XML 的 Bean 的自动装配

    一.Spring IOC 容器支持自动装配 Bean,所谓自动装配是指,不需要通过 <property> 或 <constructor-arg> 为 Bean 的属性注入值的过 ...

  9. Config文件中的回车符

    最近做的一个小程序(Windows Console),不是很大,就把错误信息写在exe.config里,但是在程序里读取config时发现,从config里取出来的回车符号("n)没有被正确 ...

最新文章

  1. 时空大数据可视化表达分析,看MapGIS七大“超能力”
  2. 【简洁易懂】为什么判断素数时只需要循环到该数的平方根
  3. JavaEE 银联支付之网站支付-消费类交易
  4. [Leetcode]62. Unique Paths
  5. mysql常用调试工具_最常用的8款PHP调试工具
  6. java图书管理系统源代码_高校社团管理系统(ssm+mysql)
  7. zabbix监控之zabbix源码部署 (安装篇)
  8. bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分
  9. 双缓冲-- double framebuffer
  10. 漫步数学分析二十七——Stone-Weierstrass定理
  11. ZABBIX 监控WEB服务 统计PV和UV
  12. 三角学(一)公式,恒等式,函数和难题
  13. 台式计算机关闭屏幕快捷键,多种电脑屏幕关闭方法推荐
  14. 【Solidity】注意事项
  15. PoE交换机的多种连接方式 PoE交换机的4种连接方式
  16. 古代的电子计算机,古代也有黑科技:周朝的智能机器人,元朝的电子计算机!...
  17. 深入分布式缓存:微博是如何应对日访问量百亿级的缓存架构设计
  18. Linux 下进行服务器间网络测速
  19. 选修课:唐宋词鉴赏课堂笔记04
  20. html图表设置y轴刻度,如何设置AnyChart Flash图表控件坐标轴元素

热门文章

  1. 如何批量给照片加水印?详细图文教程
  2. 人工智能数学中的强归纳法和高中归纳法
  3. 计算机主板跳线怎么放电,主板电池放电清BIOS恢复出厂设置怎么操作?图文教程...
  4. 计算机组装与维护学生情况分析,《计算机组装与维护》之机箱和电源的说课稿...
  5. 谁知nmn的功效与作用,nmn真实效果图,吐血整理
  6. 极域卸载不干净,这里有办法....
  7. 狗比男人好的21个理由
  8. linux目录权限子目录权限,linux中更改所有子文件和子目录所有者权限
  9. “九章”量子计算机这么牛,到底有什么用?
  10. Golang引入包报错 package xxx is not in GOROOT