You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows Server 2016-IIS 10中如何启用“为每个应用生成唯一密钥”?

解决IIS 10中“为每个应用生成唯一密钥”的替代方案

嘿,这个问题我帮不少同行处理过——IIS 10确实移除了IIS 7.5里那个直观的“Generate a unique key for each application”可视化选项,但咱们完全可以通过其他方式实现相同的效果,甚至更灵活。核心目标就是让每个应用拥有独立的machineKey,不再继承服务器级的配置,下面是几种靠谱的方法:

方法1:手动编辑应用的web.config

默认情况下,应用会继承服务器根目录web.config中的machineKey设置。要让应用拥有唯一密钥,直接在该应用根目录的web.config里添加独立的machineKey节点即可。你可以自己生成随机密钥,示例配置如下:

<configuration>
  <system.web>
    <machineKey 
      validationKey="这里填随机生成的256位密钥" 
      decryptionKey="这里填随机生成的128位密钥" 
      validation="SHA1" 
      decryption="AES" />
  </system.web>
</configuration>

如果不知道怎么生成随机密钥,可以用PowerShell快速生成:

# 生成32字节(256位)的validationKey
$validationKey = [System.Web.Security.MachineKey]::GenerateKey(32)
# 生成16字节(128位)的decryptionKey
$decryptionKey = [System.Web.Security.MachineKey]::GenerateKey(16)
Write-Host "Validation Key: $validationKey"
Write-Host "Decryption Key: $decryptionKey"

把输出的密钥复制到上面的配置里就行。

方法2:用PowerShell批量/快速设置

如果有多个应用需要配置,手动改web.config太麻烦,直接用PowerShell命令给指定应用设置独立的machineKey,一步到位:

# 替换成你的网站名称和应用路径
$siteName = "你的网站名称"
$appPath = "/你的应用路径"

# 自动生成密钥
$validationKey = [System.Web.Security.MachineKey]::GenerateKey(32)
$decryptionKey = [System.Web.Security.MachineKey]::GenerateKey(16)

# 给目标应用设置machineKey
Set-WebConfigurationProperty -Filter "/system.web/machineKey" -Name "validationKey" -Value $validationKey -PSPath "IIS:\Sites\$siteName$appPath"
Set-WebConfigurationProperty -Filter "/system.web/machineKey" -Name "decryptionKey" -Value $decryptionKey -PSPath "IIS:\Sites\$siteName$appPath"
Set-WebConfigurationProperty -Filter "/system.web/machineKey" -Name "validation" -Value "SHA1" -PSPath "IIS:\Sites\$siteName$appPath"
Set-WebConfigurationProperty -Filter "/system.web/machineKey" -Name "decryption" -Value "AES" -PSPath "IIS:\Sites\$siteName$appPath"

补充说明

微软移除这个GUI选项的原因,是鼓励用配置文件或自动化工具(比如PowerShell)来管理这类设置,这样更便于版本控制和批量操作。另外要注意:

  • 一旦给应用添加了独立的machineKey,它就不会再继承服务器级的设置,完全独立;
  • 如果你的环境是负载均衡,务必保证同一应用在所有服务器上的machineKey完全一致,否则会出现验证失败的问题。

内容的提问来源于stack exchange,提问作者poorna

火山引擎 最新活动