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

Mar*_*ino 44 asp.net load-balancing web-config web-farm machinekey

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

CryptographicException

填充无效,无法删除.

当我们自己点击特定服务器时,它们会很好地加载.我研究了这个问题,看起来因为它们在两台服务器之间共享资产,我们需要machineKeyweb.config每台服务器上保持一致,这样它们才能在两者之间一致地加密和解密.我的问题是:

  1. 我可以machineKey在服务器上生成一个工具,还是需要编写代码才能执行此操作?
  2. 我只需要添加machineKeyweb.config每个服务器上或者你认为我会需要做任何事情就两个服务器协同工作?(两者web.config目前都没有machineKey)

Bla*_*ICE 54

这应该回答:

如何:在ASP.NET 2.0中配置MachineKey - Web场部署注意事项

Web场部署注意事项

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

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

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"       

decryptionKey="ABAA84D7EC4BB56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
validation="SHA1"
decryption="AES"
/>
Run Code Online (Sandbox Code Playgroud)

如果要将应用程序与同一服务器上的其他应用程序隔离,请将该文件放在服务器场中每台服务器上的每个应用程序的Web.config文件中.确保为每个应用程序使用单独的键值,但在服务器场中的所有服务器上复制每个应用程序的键.

简而言之,要设置机器密钥,请参阅以下链接: 设置机器密钥 - Orchard文档.

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

如果您可以访问安装了Orchard的服务器的IIS管理控制台,则这是设置计算机密钥的最简单方法.

启动管理控制台,然后选择该网站.打开机器密钥配置: IIS网站配置面板

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

机器密钥配置面板

取消选中验证密钥和解密密钥的"在运行时自动生成".

单击面板右侧"操作"下的"生成密钥".

单击"应用".

如果不存在,则将以下行添加到web.config所有webserversunder system.web标记中的文件中.

<machineKey  
    validationKey="21F0SAMPLEKEY9C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
                   AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"           
    decryptionKey="ABAASAMPLEKEY56D75D217CECFFB9628809BDB8BF91CFCD64568A145BE59719F"
    validation="SHA1"
    decryption="AES"
/>
Run Code Online (Sandbox Code Playgroud)

请确保您拥有机器密钥和web.config文件的永久备份

  • 如果它不起作用,请从上面的代码行中删除`validation =“ SHA1” decryption =“ AES”`,然后它可以正常工作。 (2认同)
  • SHA1 似乎是遗留的。截至 2021 年 8 月 28 日,MS 的文档建议改用 HMACSHA256,或其他替代方案之一... https://learn.microsoft.com/en-us/dotnet/api/system.web.configuration.machinekeyvalidation ?view=netframework-4.8 (2认同)

The*_*ear 15

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

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

可以看到完整的详细信息@ 生成MachineKey的最简单方法 - 提示和技巧:ASP.NET,IIS和.NET开发......


egl*_*ius 6

确保从刚刚发生的padding oracle asp.net漏洞中学习(你应用了补丁,对吗?...)并使用受保护的部分来加密机器密钥和任何其他敏感配置.

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

为了生成它,就像大卫答案中的链接文章一样.