我正在使用 DCOM 在 Windows 网络上提供各种应用程序服务,使用 Kerberos 来处理身份验证。系统通常工作正常,但我遇到了从单独的(受信任的)域访问服务的问题。特别是,服务无法回调客户端应用程序,收到错误“发生安全包特定错误”。此外,如果我调整服务以明确要求 Kerberos 身份验证(而不是使用 SNEGO/negotiate),客户端甚至无法调用服务器(再次收到“发生安全包特定错误”)。
令人困惑的是,事情已经运行多年没有问题。但是,与我们之前所做的相比,这里有一些不同之处。一方面,所涉及的服务器运行的是我以前没有使用过的 Windows 2008。此外,如上所述,仅当从单独域的帐户访问服务时才会发生错误,并且以前的使用从未尝试过此操作。
现在问题是:我没有为此 DCOM 服务使用 SPN(服务主体名称),但一些错误和事件日志让我认为这可能是问题所在。但是,我发现的所有文档都不清楚这是否正确,或者如果我确实需要它,我将如何设置 SPN。有人确定 SPN 是否是我在这里缺少的吗?如果是这样,你能指出我应该如何做吗?
额外细节:
对于服务器设置为强制 Kerberos 身份验证的场景,打开Extended RPC Debugging会提供一些额外的线索。客户端可以使用 CoCreateInstanceEx 成功连接,但服务接口上的调用会失败,如上所述。RPC 错误记录在位置 140 处显示错误,错误代码为 0x80090303(“指定的目标未知或无法访问”),该记录的第三个参数是空字符串。这表明缺少 SPN 是罪魁祸首。