如何通过PowerShell配置IIS服务器级Machine Key?
用PowerShell配置IIS服务器级Machine Key的方法
核心原理
服务器级Machine Key配置存储在IIS根配置文件%windir%\System32\inetsrv\config\applicationHost.config中,配置完成后会被所有站点自动继承,要实现多服务器密钥一致,只需在每台服务器执行相同脚本即可。
方法一:通过WebAdministration模块操作(推荐)
该模块是IIS管理的官方PowerShell模块,操作更直观:
- 导入模块
Import-Module WebAdministration
- 设置服务器级Machine Key(替换示例中的密钥值和算法)
# 设置验证密钥 Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.web/machineKey" ` -name "validationKey" ` -value "YOUR_VALIDATION_KEY_HERE" # 设置解密密钥 Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.web/machineKey" ` -name "decryptionKey" ` -value "YOUR_DECRYPTION_KEY_HERE" # 设置验证算法(如SHA1、HMACSHA256等) Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.web/machineKey" ` -name "validation" ` -value "SHA1" # 设置解密算法(如AES、3DES等) Set-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.web/machineKey" ` -name "decryption" ` -value "AES"
- 验证配置结果
Get-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST' ` -filter "system.web/machineKey" ` -name "validationKey,decryptionKey,validation,decryption"
方法二:使用AppCmd.exe(兼容旧版IIS)
若服务器未安装WebAdministration模块,可直接调用IIS自带的AppCmd工具:
& "$env:windir\system32\inetsrv\appcmd.exe" set config -section:system.web/machineKey ` /validationKey:"YOUR_VALIDATION_KEY_HERE" ` /decryptionKey:"YOUR_DECRYPTION_KEY_HERE" ` /validation:SHA1 ` /decryption:AES
注意事项
- 强密钥可通过PowerShell生成,比如生成64字节验证密钥:
[System.Web.Security.MachineKey]::GenerateKey(64) - 修改配置后无需重启IIS,设置会立即生效
- 多服务器部署时,确保所有服务器执行完全相同的脚本,密钥值和算法必须完全一致
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

