来自 SSPI 的 KRB_AP_REQ 票证

Posted

技术标签:

【中文标题】来自 SSPI 的 KRB_AP_REQ 票证【英文标题】:KRB_AP_REQ ticket from SSPI 【发布时间】:2011-10-10 03:38:02 【问题描述】:

我有一个使用 Kerberos 进行客户端身份验证的 Linux 服务器应用程序和需要在 Windows 上运行的客户端。 Kerberos 票证由 Windows Active Directory 颁发。如果我使用 MIT KfW 3.2.2,客户端在服务器上成功验证。用于从 Kerberos 服务器检索 AS 和 TGS 票证并将其存储在 kerberos 凭证存储中的 API。但是这种方法的问题是用户需要再次输入他的凭据。 解决方案是访问 MS LSA 存储,但这不起作用。 ms2mit.exe 应用程序也没有。我以普通用户或管理员身份运行它,或者我完全禁用 UAC 都没有关系。 这就是为什么我想在客户端使用 SSPI 来制作我将发送到服务器的 KRB_AP_REQ 消息。那可能吗。如果是的话怎么做?如果没有,我的其他选择是什么?请注意,服务器已经建好,更改它需要付出很大的努力,因此我想在 windows 上找到一个解决方案。

【问题讨论】:

好的,我在 ASN.1 查看器中打开了 SSPI 消息,似乎 Microsoft 包装了 AP_REQ 消息。 Wrapper 包括(至少在我的情况下)对象标识符、布尔值和 AP_REQ 消息。如果我将此 AP_REQ 消息与 MIT Kerberos 库一起使用,则它可以解码。现在剩下的唯一问题是如何通过使用文档化的接口来做到这一点,因为依赖于未文档化的行为可能在生产环境中使用起来很脆弱。 SSPI 实际上是符合标准的 GSSAPI、RFC 1964 实现。描述 InitializeSecurityContext 为 Kerberos 子系统返回的令牌格式的类似 ASN.1 的类型是 InitialContextToken(RFC 1964 sec 1.1 )。从技术上讲,它不是 ASN.1,因为它在 KRB_AP_REQ 之前有一个 2 字节的“令牌”,这使其格式错误。我知道它的 6 年为时已晚,但从 token+17 字节中获取 KRB_AP_REQ 实际上并不是无证行为。 【参考方案1】:

您可以使用 Windows SSPI 子系统的 AquireCredentialsHandle 和 InitializeSecurityContext 函数来获取有效票证并针对基于 Linux 的服务器进行身份验证。

首先使用AcquireCredentialsHandle(),然后使用您从服务器获得的令牌多次调用InitializeSecurityContext,直到您通过身份验证。

【讨论】:

以上是关于来自 SSPI 的 KRB_AP_REQ 票证的主要内容,如果未能解决你的问题,请参考以下文章

Integrated Security = True 和 Integrated Security = SSPI 有啥区别?

使用 SSPI 支持多进程的 kerberos 约束委派

WCF 服务 - 身份验证/SSPI 错误

SSPI:用户主体名称 WCF 客户端

WCF 安全支持提供程序接口 (SSPI) 协商失败

apns sharp 中的 iPhone 证书错误调用 SSPI 失败