2009-02-02 39 views
2

我使用DCOM在Windows网络上提供各种应用程序服务,使用Kerberos处理身份验证。系统通常工作正常,但我遇到了从单独(可信)域访问服务的问题。特别是,该服务无法对客户端应用程序进行回调,并收到错误“发生安全包特定错误”。另外,如果我调整服务以明确要求Kerberos身份验证(而不是使用SNEGO/negotiate),则客户端甚至无法调用服务器(再次收到“发生安全包特定错误”)。在DCOM中使用Kerberos时需要SPN吗?

令人困惑的是,事情已经好几年没有问题。然而,与我们之前所做的相比,这里有一些不同之处。首先,涉及的服务器运行的是Windows 2008,这是我以前没有使用过的。另外,如上所述,错误只发生在从单独域中的帐户访问服务时,以前的用法从未尝试过。

现在的问题:我没有使用此DCOM服务的SPN(服务主体名称),但一些错误和事件日志使我认为这可能是问题。但是,我发现的所有文档都不清楚这是否正确,或者如果我确实需要它,我将如何设置SPN。 有谁知道SPN是我在这里失踪的吗?如果是这样,你能指出我应该怎么做?

其他细节:

对于将服务器设置为强制Kerberos身份验证,打开Extended RPC Debugging给出了一些更多的线索的情况。客户端可以使用CoCreateInstanceEx成功连接,但如上所述,服务接口上的调用失败。 RPC错误记录在位置140处显示错误,并且错误代码为0x80090303(“指定的目标未知或无法访问”),该记录的第三个参数为空字符串。这指出缺少SPN是罪魁祸首。

回答

0

编辑:看起来我可能对此有所误解。我发现至少有一个网站指出DCOM handles SPNs automatically for you(参见本页底部),并且我确认客户端可以成功连接,如果他们要求Kerberos身份验证并使用“主机/ [计算机名称]”作为SPN。


它看起来像一个SPN是必需的服务,如果你明确要求Kerberos身份验证的DCOM服务器进程调用CoInitializeSecurity时。对我来说,看起来像这样的电话:

警告:请不要直接复制此代码,而不确保这些值是否适合您的安全需求。

SOLE_AUTHENTICATION_SERVICE sas; 
sas.dwAuthnSvc = RPC_C_AUTHN_GSS_KERBEROS; 
sas.dwAuthzSvc = RPC_C_AUTHZ_NONE; 
sas.pPrincipalName = L"myservice/mymachine"; 
sas.hr = S_OK; 
CoInitializeSecurity(0, 1, &sas, 0, RPC_C_AUTHN_LEVEL_DEFAULT, 
    RPC_C_IMP_LEVEL_DEFAULT, 0, EOAC_NONE, 0); 

的SPN可以使用setspn进行配置,如下面所示:

setspn -A myservice/mymachine serviceusername 

(见SETSPN文档的详细信息)。

不幸的是,这仍然没有解决我的问题,但我认为剩下的问题与测试机器的一些特定问题有关。

1

Kerberos根据定义需要SPN的价值。你可能能够利用内置的SPNS(主机/)和主机暗示的各种风格(这个别名翻译存储在AD中,但在我的生活中,我似乎无法找到文章列表在哪里这被发现)。

我首先看看跨域身份验证 - 对Kerberos来说可能会很棘手。我首先在客户端和服务器上打开完整的kerberos logging,然后看看是否有什么变化。

+0

感谢您的信息。我以前曾尝试过Kerberos日志记录(以及其他一些我读过的日志),但从未能够解决问题。 – Charlie 2009-03-20 02:40:07

1

我在尝试创建远程COM对象的实例时遇到了此错误。我们可能会遇到此错误如果在调用CoInitializeSecurity()期间客户端使用“委托”模拟级别,并且COM +服务在域级别上不具有“委派”权限的用户帐户下运行。

相关问题