将machineKey添加到Web场网站上的web.config

时间:2010-10-04 13:29:45

标签: asp.net web-config load-balancing web-farm machinekey

我们(我们的IT合作伙伴真的)最近为我们拥有的网络养殖网站更改了一些DNS,因此两台生产服务器之间进行了循环DNS切换。在此切换之前,我们确实没有WebResource.axd个文件的问题。自切换以来,当我们点击实时公共URL时,我们收到错误:

  

CryptographicException

     

填充无效,无法删除。

当我们点击特定服务器本身时,它们会很好地加载。我研究了这个问题,看起来因为他们在两台服务器之间共享资产,我们需要在每个服务器的machineKey中保持一致web.config,这样他们就可以在两者之间一致地加密和解密。我的问题是:

  1. 我可以通过服务器上的工具生成machineKey,还是需要编写代码才能执行此操作?
  2. 我是否只需要将machineKey添加到每台服务器上的web.config,或者您认为我还需要做其他任何事情才能让两台服务器协同工作? (web.config目前都没有machineKey

3 个答案:

答案 0 :(得分:53)

这应该回答:

How To: Configure MachineKey in ASP.NET 2.0 - Web Farm Deployment Considerations

  

Web场部署注意事项

     

如果在Web场中部署应用程序,则必须确保该应用程序   每台服务器上的配置文件共享相同的值   validationKey和decryptionKey,用于散列和   分别解密。这是必需的,因为您无法保证   哪个服务器将处理连续的请求。

     

使用手动生成的键值,设置应该   类似于以下示例。

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"       

decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
     

如果要将应用程序与其他应用程序隔离开来   相同的服务器,将其放在Web.config文件中   应用程序在服务器场中的每个服务器确保您单独使用   每个应用程序的键值,但复制每个应用程序的键   遍布服务器场中的所有服务器。

简而言之,要设置机器密钥,请参阅以下链接: Setting Up a Machine Key - Orchard Documentation

  

使用IIS管理器设置计算机密钥

     

如果您有权访问服务器所在的IIS管理控制台   安装了Orchard,这是设置机器密钥的最简单方法。

     

启动管理控制台,然后选择网站。打开   机器密钥配置:   The IIS web site configuration panel

     

机器键控制面板具有以下设置:

     

The machine key configuration panel

     

取消选中“在运行时自动生成”以进行验证   密钥和解密密钥。

     

点击面板右侧“操作”下的“生成密钥”。

     

点击“应用”。

并将以下行添加到web.config标记下webservers标记下的system.web文件中。

<machineKey  
    validationKey="21F0SAMPLEKEY9C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
                   AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
    decryptionKey="ABAASAMPLEKEY56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
    validation="SHA1"
    decryption="AES"
/>

请确保您拥有机器密钥和web.config文件

的永久备份

答案 1 :(得分:15)

如果您使用的是IIS 7.5或更高版本,则可以从IIS生成计算机密钥并将其直接保存到web.config中,然后在Web场中将新的web.config复制到每个服务器。

  1. 打开IIS管理器。
  2. 如果需要为所有应用程序生成并保存MachineKey,请在左窗格中选择服务器名称,在这种情况下,您将修改根web.config文件(放在.NET框架文件夹中)。如果您打算为特定网站/应用程序创建MachineKey,请从左侧窗格中选择网站/应用程序。在这种情况下,您将修改应用程序的web.config文件。
  3. 双击中间窗格中的ASP.NET设置中的计算机密钥图标:
  4. 将从配置文件中读取MachineKey部分并显示在UI中。如果您没有配置特定的MachineKey并且它是​​自动生成的,您将看到以下选项:
  5. 现在,您可以单击右窗格中的“生成密钥”以生成随机MachineKeys。单击“应用”后,所有设置都将保存在web.config文件中。
  6. 完整详细信息可以在Easiest way to generate MachineKey – Tips and tricks: ASP.NET, IIS and .NET development…

    看到

答案 2 :(得分:6)

请务必向刚刚发生的padding oracle asp.net vulnerability学习(您应用了修补程序,对吗?...)并使用protected sections to encrypt the machine key和任何其他敏感配置。

另一种选择是在机器级别web.config中设置它,因此它甚至不在网站文件夹中。

为了生成它,就像大卫回答的链接文章一样。