我正在尝试在 IIS 8 (Windows 2012) 中将域用户帐户设置为 ApplicationPool Identity。使用 IIS 管理控制台尝试此操作时,我总是收到错误:
值不在预期范围内。
尝试使用 appcmd.exe 设置身份时,设置用户名和密码的命令或仅设置密码的命令均会失败。设置用户名没有问题。
尝试设置用户名和密码[失败]:
>appcmd set config /section:applicationPools /[name='AppPoolName'].processModel.identityType:SpecificUser /[name='AppPoolName'].processModel.userName:DOMAIN\Username /[name='AppPoolName'].processModel.password:P4ssW0rd
Applied configuration changes to section "system.applicationHost/applicationPools" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
ERROR ( hresult:80070057, message:Failed to commit configuration changes. The parameter is incorrect. )
尝试仅设置用户名[成功]:
>appcmd set config /section:applicationPools /[name='AppPoolName'].processModel.identityType:SpecificUser /[name='AppPoolName'].processModel.userName:DOMAIN\Username
Applied configuration changes to section "system.applicationHost/applicationPools" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
成功设置用户名后尝试设置密码[FAIL]:
>appcmd set config /section:applicationPools /[name='AppPoolName'].processModel.identityType:SpecificUser /[name='AppPoolName'].processModel.password:P4ssW0rd
Applied configuration changes to section "system.applicationHost/applicationPools" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
ERROR ( hresult:80070057, message:Failed to commit configuration changes. The parameter is incorrect. )
我将域用户添加到 IIS_IUSRS 组并允许其“作为服务登录”。
有什么建议我可能做错了吗?
答案1
按照如何设置 IIS Web 应用程序以便它可以在没有 AD 的情况下访问网络共享?
我遇到了同样的问题,但无法以明文形式输入密码,因此我进一步挖掘并找到了这篇文章: 自定义 IIS 应用程序池标识:值不在预期范围内
诊断的关键步骤是查看正确的事件:
为了弄清楚如何解决这个问题,我进入了事件查看器。应用程序日志中没有任何内容,所以我转到应用程序和服务日志 => Microsoft => Windows => IIS 配置。这里的日志默认是禁用的,因此必须启用它们。(为此,请右键单击日志,然后选择启用日志。)启用后,重新运行设置身份的尝试,然后刷新视图(操作窗格或 F5),瞧!现在我们有了有关错误的更多信息。结果有两个错误(事件 ID 42 和 43)。
我遇到了与文章中相同的事件错误:
ID 42:无法初始化“\?\C:\windows\system32\inetsrv\config\applicationHost.config”中的“IISWASOnlyAesProvider”加密提供程序。请检查您的配置。
ID 43:无法加密属性“Microsoft.ApplicationHost.AesProtectedConfigurationProvider”。
然后我做了以下事情:
- 恢复旧版本的 ConfigEncKey.key 文件(至
c:\windows\System32\inetsrv\config
) <configProtectedData><providers>
用旧部分替换该部分(在c:\windows\System32\inetsrv\config\applicationHost.config
)
然后我可以再次为应用程序池设置自定义标识。
答案2
您可以从另一台服务器获取私钥,然后只需将其导入到此服务器即可,方法是先从另一个可用的 IIS 服务器导出密钥:C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis -px "iisWasKey" "C:\temp\AESKeys.xml" -pri
其次,您可以在损坏的机器上恢复该密钥(将密钥复制到另一台服务器并将其放在同一位置):C:\Windows\Microsoft.NET\Framework64\v4.0.30319>aspnet_regiis -pi "iisWasKey" "C:\temp\AESKeys.xml"
第三,编辑 c:\windows\system32\inetsrv\applicationhost.config 并使用已知工作服务器中的 configprotecteddata 部分来代替此文件中已有的部分。
它看起来像这个部分:
如果一切顺利,您可以通过创建应用程序池进行测试,然后转到高级设置并以 DOMAIN\user 或其他需要的用户身份运行它。
托尼·特拉斯
答案3
检查此应用程序池上配置的应用程序的绑定,看它们是否有任何不正确的绑定,例如无效字符、空格等。
答案4
尝试更改/section:applicationPools
为/section:system.applicationHost/applicationPools
并添加/commit:apphost
到末尾
appcmd 设置配置/section:system.applicationHost/applicationPools/[name='AppPoolName'].processModel.identityType:SpecificUser/[name='AppPoolName'].processModel.password:P4ssW0rd/commit:apphost