首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DCOM身份验证无法使用Kerberos,Falls返回NTLM

DCOM身份验证无法使用Kerberos,Falls返回NTLM
EN

Server Fault用户
提问于 2011-04-29 19:41:28
回答 1查看 3.9K关注 0票数 1

我有一个用经典ASP编写的webservice。在这个web服务中,它尝试通过DCOM在另一个服务器上创建一个VirtualServer.Application对象。这在拒绝许可的情况下失败。但是,我在同一个远程服务器上的同一个the服务中实例化了另一个组件,该组件的创建没有问题。此组件是自定义内部组件。

via服务是从一个独立的EXE程序中调用的,该程序通过WinHTTP调用它。已经证实,WinHTTP正在成功地通过Kerberos对webservice进行身份验证。通过The服务身份验证的用户是Administrator用户。EXE到webservice身份验证步骤是成功的,并且使用了kerberos。

我已经用DCOMCNFG在远程计算机上验证了DCOM权限。默认限制允许管理员进行本地和远程激活,包括本地和远程访问,以及本地和远程启动。默认组件权限允许相同。这一点已得到证实。工作组件的各个组件权限设置为默认值。VirtualServer.Application组件的各个组件权限也设置为默认值。基于这些设置,webservice应该能够实例化并访问远程计算机上的组件。

在运行这两个测试时,设置一个Wireshark跟踪,一个测试使用工作组件,另一个测试使用VirtualServer.Application组件,这将显示一个无穷无尽的行为。当webservice实例化工作、自定义组件时,我可以看到连接上对RPCSS端点映射程序的请求,首先执行TCP连接序列。然后,我看到它使用适当的安全包执行绑定请求,在本例中是kerberos。在获得工作DCOM组件的端点之后,它通过Kerberos再次连接到DCOM端点身份验证,并且能够成功地实例化和通信。

在失败的VirtualServer.Application组件上,我再次看到使用kerberos的绑定请求成功地转到RPCC终端映射程序。但是,当它试图连接到Virtual进程中的端点时,它失败了,因为它只尝试使用NTLM进行身份验证,这最终失败了,因为webservice无法访问凭据来执行NTLM哈希。

为什么它试图通过NTLM进行身份验证?

其他信息:

  • 两个组件通过DCOM在同一台服务器上运行。
  • 这两个组件在服务器上作为本地系统运行
  • 这两个组件都是Win32服务组件
  • 这两个组件具有完全相同的启动/访问/激活DCOM权限。
  • 这两个Win32服务都被设置为本地系统运行
  • 据我所知,拒绝的权限不是权限问题,而是身份验证问题。权限被拒绝,因为NTLM身份验证与空用户名一起使用,而不是Kerberos委托。
  • 在承载the服务的服务器上设置受约束的委托。
  • 托管webservice的服务器可以委托给rpcss/dcom- server -name。
  • 托管webservice的服务器可以委托给vssvc/dcom- server -name。
  • 允许dcom服务器委托rpcss/webservice-server。
  • 在dcom服务器上注册的SPN包括rpcss/dcom- server -name和vssvc/dcom-server-name以及与主机/dcom服务器名称相关的SPN。
  • 在webservice-server上注册的SPN包括rpcss/webservice-server和主机/webservice-server相关的SPN。

有谁知道在远程服务器上创建VirtualServer.Application对象的尝试为什么会退回到NTLM身份验证,导致其失败并被拒绝权限?

附加信息:当以下代码在webservice上下文中运行时,直接通过仅测试的、刚刚开发的COM组件运行时,它将在指定的行上失败,访问被拒绝。

代码语言:javascript
复制
COSERVERINFO csi;
csi.dwReserved1=0;
csi.pwszName=L"terahnee.rivin.net";
csi.pAuthInfo=NULL;
csi.dwReserved2=NULL;
hr=CoGetClassObject(CLSID_VirtualServer, CLSCTX_ALL, &csi, IID_IClassFactory, (void **) &pClsFact);
if(FAILED( hr )) goto error1;

// Fails here with HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED)
hr=pClsFact->CreateInstance(NULL, IID_IUnknown, (void **) &pUnk);
if(FAILED( hr )) goto error2;

我还注意到,在Wireshark跟踪中,我看到试图连接到服务流程组件的尝试只请求NTLMSSP身份验证,甚至不会使用kerberos。这表明,由于某种原因,webservice认为它不能使用kerberos.

EN

回答 1

Server Fault用户

发布于 2011-04-29 20:42:11

NTLM身份验证回退是一种症状。真正的问题是为什么Kerberos失败了。

这听起来像是一个典型的情况,即所获得的模拟级别不足以执行所请求的活动。在Kerberos中使用委托,如果正在模拟的机器或进程没有“模拟”令牌,而是具有较低的令牌(如" identity“),则请求Kerberos身份验证在使用另一个标识时访问资源将失败。

有四种类型的模拟令牌:

匿名

身份

冒充

委派

“模拟”允许模拟访问执行模拟的进程所在的同一台计算机上的资源。如果执行模拟的进程在不同的计算机上访问资源,而不是在执行模拟时,则需要一个“委托”令牌。这通常需要TCB特权(Act作为操作系统的一部分)。

TokenImpersonationLevel枚举

http://msdn.microsoft.com/en-us/library/system.security.principal.tokenimpersonationlevel%28v=vs.80%29.aspx

注意,Windows XP/Server 2003中的DCOM默认模拟级别是"Identity“。这意味着进程可能无法在模拟另一个标识时访问资源。您可能需要对计算机级或进程级安全配置进行实验,以找出什么是有效的。您可能会发现,需要启用加密才能连接到某些资源。配置一个与另一个服务相同的服务可能不是苹果-苹果比较。

不同操作系统之间的连接

http://msdn.microsoft.com/en-us/library/aa389284%28v=vs.85%29.aspx

使用DCOMCNFG设置系统范围的安全性

http://msdn.microsoft.com/en-us/library/ms680051%28v=vs.85%29.aspx

使用C++设置默认进程安全级别

http://msdn.microsoft.com/en-us/library/aa393617%28v=vs.85%29.aspx

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/264853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档