60

我们(实际上是我们的 IT 合作伙伴)最近为我们拥有的一个网络农场站点更改了一些 DNS,以便两个生产服务器在它们之间进行循环 DNS 切换。在此切换之前,我们并没有真正遇到WebResource.axd文件问题。自从切换后,当我们点击实时公共 URL 时,我们得到一个错误:

加密异常

填充无效且无法移除。

当我们自己访问特定服务器时,它们加载正常。我已经研究过这个问题,似乎因为他们在两台服务器之间共享资产,我们需要machineKeyweb.config每台服务器上保持一致,以便他们可以在两者之间一致地加密和解密。我的问题是:

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

3 回答 3

72

这应该回答:

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

Web 场部署注意事项

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

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

<machineKey  
validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7
               AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"       

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

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

简而言之,要设置机器密钥,请参考以下链接: 设置机器密钥 - 果园文档

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

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

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

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

机器按键配置面板

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

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

点击“应用”。

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

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

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

于 2010-10-04T13:53:09.977 回答
21
于 2014-07-16T08:51:37.907 回答
8

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

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

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

于 2010-10-04T16:37:28.753 回答