将Kerberos与DCOM一起使用时是否需要SPN?

时间:2009-02-02 17:57:30

标签: windows security kerberos dcom

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

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

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

其他详细信息:

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

3 个答案:

答案 0 :(得分:1)

编辑:看起来我可能有点误会。我找到的至少一个网站指出DCOM handles SPNs automatically for you(参见页面底部),我确认客户端可以成功连接,如果他们要求Kerberos身份验证并使用“host / [computername]”作为SPN。


如果在DCOM服务器进程中调用CoInitializeSecurity时明确要求Kerberos身份验证,则看起来服务需要SPN。对我来说,电话看起来像这样:

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

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 );

可以使用setspn配置SPN,如下所示:

setspn -A myservice/mymachine serviceusername

(有关详细信息,请参阅setspn文档)。

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

答案 1 :(得分:1)

根据定义,Kerberos的价值在于它需要SPN。您可能能够利用内置的SPNS(主机/)和主机所暗示的各种风格(这个别名翻译存储在AD中,但对于我的生活,我似乎无法找到文章列出的位置这是找到的。

我首先看一下跨域身份验证 - 使用kerberos可能会很棘手。我首先在客户端和服务器上启用完整的kerberos logging,看看是否会出现任何问题。

答案 2 :(得分:1)

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