无法在 IIS 8 中为域用户设置作为应用程序池标识的密码

无法在 IIS 8 中为域用户设置作为应用程序池标识的密码

我正在尝试在 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

相关内容