代码之家  ›  专栏  ›  技术社区  ›  Charlie

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

  •  2
  • Charlie  · 技术社区  · 16 年前

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

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

    其他详情:

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

    3 回复  |  直到 16 年前
        1
  •  1
  •   Christopher G. Lewis    15 年前

    无论如何,Kerberos根据定义需要spn。您可能能够利用内置的SPN(host/)和host所暗示的各种风格(此别名翻译存储在广告中,但就我而言,我似乎找不到列出此内容的文章)。

    首先,我要看一下跨域身份验证——使用kerberos可能会很棘手。我会先打开全速 kerberos logging

        2
  •  1
  •   Charlie    15 年前

    编辑 当前位置看起来我可能有点误解了。我发现至少有一个网站说 DCOM handles SPNs automatically for you (请参阅页面底部),我确认,如果客户端要求Kerberos身份验证并使用“host/[computername]”作为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 ,如下所示:

    setspn -A myservice/mymachine serviceusername
    

    (详见setspn文件)。

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

        3
  •  1
  •   Guru HG    9 年前

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