服务账号svc-a执行Get-ADGroupMember失败问题求助
在同一域同一OU下的两个服务账号svc-a和svc-b,用于Windows Web服务器的IIS网站。服务器安装安全补丁后,svc-a执行get-adgroupmember时出现如下Kerberos认证错误:
get-adgroupmember : Either the target name is incorrect or the server has rejected the client credentials. At line:1 char:1
- get-adgroupmember acifeesadmin -server au.amp.local
- CategoryInfo : SecurityError: (acifeesadmin:ADGroup) [Get-ADGroupMember], AuthenticationException
- FullyQualifiedErrorId : ActiveDirectoryCmdlet:System.Security.Authentication.AuthenticationException,Microsoft.ActiveDirectory.Management.Commands.GetADGroupMember
启用Web服务器的RC4_HMAC_MD5加密可临时解决,但受组策略限制且存在安全风险;已为svc-a启用AES 128/256加密类型、重置密码,均无效。
排查方向
检查服务账号SPN配置
Kerberos认证依赖正确的服务主体名称(SPN)。对比svc-a和svc-b的SPN列表:setspn -L svc-a setspn -L svc-b确认
svc-a是否包含对应Web服务器的HTTP类SPN(如HTTP/webserver.au.amp.local、HTTP/webserver),缺失或不匹配会导致Kerberos票据请求失败。分析Kerberos事件日志
在域控制器和Web服务器上查看事件日志:- 事件ID 4768(Kerberos身份验证票证请求):检查请求中使用的加密类型是否包含AES,以及是否存在"预身份验证失败"等提示。
- 事件ID 4769(Kerberos服务票证请求):查看失败原因,是否为"加密类型不支持"。
验证AD账号加密属性
确认svc-a的msDS-SupportedEncryptionTypes属性是否正确设置了AES标识:Get-ADUser svc-a -Properties msDS-SupportedEncryptionTypes | Select-Object Name, msDS-SupportedEncryptionTypes有效值:
0x8(AES128)、0x10(AES256),同时启用则为0x18。若值不正确,说明AES加密未真正生效。检查IIS应用池配置
对比svc-a和svc-b对应的IIS应用池设置:- 确认应用池身份是否正确配置为
svc-a。 - 检查是否勾选Load User Profile选项:未勾选会导致账号无法生成Kerberos票据所需的本地配置文件。
- 确认应用池身份是否正确配置为
确认域Kerberos策略
查看组策略中计算机配置>Windows设置>安全设置>本地策略>安全选项>Network security: Configure encryption types allowed for Kerberos,确保AES128_HMAC_SHA1、AES256_HMAC_SHA1已被启用,且未被RC4优先级覆盖。
解决方案
补全/修正SPN并重置密码
若svc-a缺失对应SPN,添加后重置密码(确保密钥同步):setspn -A HTTP/webserver.au.amp.local svc-a setspn -A HTTP/webserver svc-a # 重置svc-a密码 Set-ADAccountPassword svc-a -Reset -NewPassword (ConvertTo-SecureString "NewPassword" -AsPlainText -Force)强制AD账号使用AES加密
手动设置svc-a的加密类型属性,重置密码后生效:Set-ADUser svc-a -Replace @{msDS-SupportedEncryptionTypes=0x18} Set-ADAccountPassword svc-a -Reset -NewPassword (ConvertTo-SecureString "NewPassword" -AsPlainText -Force)调整IIS应用池设置
启用应用池的Load User Profile选项,重启应用池和IIS服务:# 启用Load User Profile Set-ItemProperty "IIS:\AppPools\YourAppPoolName" -Name processModel.loadUserProfile -Value $true # 重启应用池 Restart-WebAppPool -Name "YourAppPoolName"优化Kerberos加密策略
在组策略中调整Network security: Configure encryption types allowed for Kerberos,将AES128、AES256移至优先级最高位,同时禁用RC4(需确保所有域内服务均支持AES)。
内容的提问来源于stack exchange,提问作者Sachin

