You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KB5050009更新后Kerberos认证AcceptSecurityContext报错SEC_E_LOGON_DENIED求助

解决KB5050009更新后Kerberos认证SEC_E_LOGON_DENIED问题

问题背景

Windows 11安装KB5050009更新后,Kerberos服务端以域用户ServiceUser@MyCompany.com运行时,AcceptSecurityContext函数返回SEC_E_LOGON_DENIED(0x8009030C),但服务端以SYSTEM账号启动时认证正常,卸载该更新可恢复功能。客户端代码运行无异常,SPN配置正确,KDC为最新版本Samba。

解决方案步骤

1. 检查服务账号的Kerberos权限配置

KB5050009可能收紧了Kerberos票据验证的权限要求,需确认服务账号的AD属性:

  • 打开AD用户和计算机,找到ServiceUser账号,进入「账户」选项卡,确认Kerberos AES 128位加密、Kerberos AES 256位加密已勾选(需KDC支持对应加密类型)。
  • 若涉及委派场景,进入「委派」选项卡,确保配置了正确的SPN委派权限,测试环境可临时启用「信任此用户委派到任何服务(仅Kerberos)」验证。

2. 显式指定服务账号凭证

原服务端代码中AcquireCredentialsHandleA的第一个参数为nullptr,尝试显式指定服务账号的UPN,确保凭证句柄明确关联目标账号:

CredHandle credentials{};
TimeStamp lifetime{};
std::array<char,9>package={"kerberos"};
// 显式传入服务账号UPN,替换原nullptr
const char* serviceUserUpn = "ServiceUser@MyCompany.com";
AcquireCredentialsHandleA(serviceUserUpn, package.data(), SECPKG_CRED_INBOUND,
    nullptr, nullptr, nullptr, nullptr, &credentials, &lifetime);

SecHandle securityContext{};
ULONG attribs=0;
auto res=AcceptSecurityContext(&credentials,nullptr,&inBufferArray,attribs,
    SECURITY_NATIVE_DREP,&securityContext,&outBufferArray,&attribs,nullptr);

3. 验证Kerberos加密类型兼容性

KB5050009可能禁用了RC4等弱加密类型,需确保KDC和服务端使用兼容的强加密:

  • 检查Samba的smb.conf配置,确保kerberos method = secrets and keytab,且keytab文件包含AES类型密钥。
  • 在服务端使用klist命令查看当前票据,确认获取到AES加密的票据,而非RC4。

4. 启用Kerberos日志排查细节

通过Windows事件日志获取更详细的失败原因:

  • 打开事件查看器,导航到「应用程序和服务日志」→「Microsoft」→「Windows」→「Kerberos-Key-Distribution-Center」,启用日志。
  • 重新触发认证失败,查看事件日志中的具体错误信息(如加密类型不匹配、权限不足等)。

5. 临时注册表调整(测试用)

若上述方法无效,可临时回退Kerberos的加密限制(仅用于测试,不建议长期使用):

  • 打开注册表编辑器,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters。
  • 添加DWORD值AllowWeakCrypto,设置为1(允许弱加密类型)。
  • 重启机器后验证认证是否恢复。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 20:13:14