【问题标题】:Adding machineKey to web.config on web-farm sites将 machineKey 添加到 web-farm 站点上的 web.config
【发布时间】:2011-04-20 19:38:24
【问题描述】:

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

加密异常

填充无效,无法移除。

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

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

【问题讨论】:

  • 尝试在serverfault.com发帖
  • @TimS -- 好的。我刚刚想到了带有.NET 的 web.config 的 SO b/c,但我将适当地迁移过来。谢谢。
  • Np,可能会得到更多的回应。

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


【解决方案1】:

这应该回答:

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

Web Farm 部署注意事项

如果您在 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 已安装,这是设置机器密钥的最简单方法。

启动管理控制台,然后选择网站。打开 机键配置:

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

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

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

点击“应用”。

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

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

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

【讨论】:

  • 如果不行,请将上面代码行中的validation="SHA1" decryption="AES"去掉,就可以正常工作了。
  • 您知道如何为 Azure Web App 设置相同的设置吗?我们希望拥有具有高可用性灾难恢复 (HADR) 的 ASP.Net MVC 应用程序。对于 Azure 设置,我们无法从 IIS 生成机器密钥,而是使用博客 link。但我们收到内部服务器错误 (500)
  • @BlackICE,我忘记了上面 cmets 中提到的你的名字。你知道如何为 MS Azure Web App 设置相同的设置吗?
  • 对于在 web.config 中尚未配置 machineKey 部分的默认位置,即%SystemRoot%\Microsoft.NET\Framework\%VersionNumber%\CONFIG\web.config.comments
  • 添加 machine.config ?
【解决方案2】:

确保从刚刚发生的padding oracle asp.net vulnerability 中学习(您应用了补丁,对吗?...)并使用protected sections to encrypt the machine key 和任何其他敏感配置。

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

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

【讨论】:

    【解决方案3】:

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

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

    完整详情可见@Easiest way to generate MachineKey – Tips and tricks: ASP.NET, IIS and .NET development…

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多