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

域用户调用AcquireCredentialsHandle(Schannel)(LocalMachine证书存储)所需权限咨询

问题描述

本地用户身份运行程序时,可成功通过Schannel创建连接,调用AcquireCredentialsHandle的代码如下:

credData.dwVersion = SCHANNEL_CRED_VERSION;
credData.cCreds    = 1;
credData.paCred    = &pSecLstr->serverCert;

ss = AcquireCredentialsHandle(NULL,
                              UNISP_NAME,
                              SECPKG_CRED_INBOUND,
                              NULL,
                              &credData,
                              NULL, NULL,
                              &(pSecLstr->hCred),
                              &Lifetime);

但通过RDP登录的域用户身份运行时,调用LocalMachine证书存储会返回0x00000520 (ERROR_NO_SUCH_LOGON_SESSION)。推测域账户缺少本地用户默认拥有的权限或安全策略,请问具体是哪些?

解决方案与权限说明

返回ERROR_NO_SUCH_LOGON_SESSION的核心原因是域用户的登录会话或安全上下文无法访问Schannel所需的证书/凭据资源,以下是必须配置的权限与策略:

1. Local Machine证书存储及私钥的读取权限

  • 域用户需要对目标证书所在的LocalMachine存储(通常是My/个人存储)拥有读取权限,同时必须能读取证书对应的私钥:
    • 打开certlm.msc(本地计算机证书管理器),找到目标证书,右键→所有任务→管理私钥,添加域用户或其所属组,授予读取权限。
    • 检查私钥文件的ACL:证书私钥存储在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys目录下,通过证书的详细信息→私钥容器名称找到对应文件,右键→属性→安全,添加域用户并授予读取权限。

2. 本地安全策略中的用户权限分配

通过secpol.msc打开本地安全策略,确保域用户或其所属组拥有以下权限:

  • 允许通过远程桌面服务登录:保障RDP登录的会话合法性。
  • 允许本地登录:部分Schannel操作依赖本地登录上下文的权限。
  • 访问此计算机从网络:确保域用户能访问本地机器的网络凭据资源。

3. Schannel相关的安全策略配置

  • 打开secpol.msc→本地策略→安全选项,找到网络安全: 允许Schannel使用的加密类型,确保配置没有限制域用户的加密上下文访问(默认配置通常允许,但需确认未被自定义限制)。
  • 确保域用户属于本地用户组或Remote Desktop Users组,这些组默认拥有访问本地凭据资源的基础权限。

4. 代码层面的补充检查

如果权限配置后仍有问题,可检查SCHANNEL_CRED结构体的参数是否完整:

  • 若使用LocalMachine证书,可尝试添加SCH_CRED_NO_SYSTEM_MAPPER标志到credData.dwFlags,避免Schannel尝试映射系统凭据时出现会话问题:
    credData.dwFlags = SCH_CRED_NO_SYSTEM_MAPPER;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:26:27