GSSAPI用于NTLM身份验证

时间:2011-06-20 12:25:15

标签: c++ linux spnego gssapi negotiate

是否可以将GSSAPI用于NTLM v1 / v2身份验证?我正在尝试构建一个web服务器,就像squid / apache一样,但我想使用NTLM / Negotiate协议验证可能正在使用IE / FireFox的客户端。我尝试使用heimdal库,但根本无法使用gss_accept_sec_context。它只是失败了“请求了一个不支持的机制”。我可以确认在尝试gss_accept_sec_context之前调用gss_acquire_cred时,服务主体名称,spnego等的OID确实发生了。是的,当然,我通过base64解码授权头来提取从客户端收到的令牌。我正在使用C ++,并在debian上进行实验。 我相信这里的一个奇妙的黑客知道更多,希望将分享一些重要的线索。

先谢谢。

3 个答案:

答案 0 :(得分:1)

Heimdal的NTLM库也支持客户端。你可以使用库原语生成type1,2和3消息,它可以工作。 但是,我不知道您是否可以在Heimdal顶部使用GSS-API用于此目的。我假设测试,你也可以这样做。

答案 1 :(得分:1)

我不确定Heimdal库以及它是否适用于GSS,但gss ntlm ssp特别声称是一个gss库。 我希望你需要下载并构建它,然后你需要设置/ etc / gss / mech(或Debian和Ubuntu上的/ usr / etc / gss / mech)来指向库。 Ther build系统将在其示例目录中的mech文件中创建所需内容的示例。

在spnego下运行此操作可能会遇到麻烦。当Windows将NTLM作为协商程序包的首选机制时,它会发送原始NTLM令牌而不是RFC 4178中定义的SPNEGO令牌。这段代码肯定会让你更进一步;它肯定会超过gss_accept_sec_context,表明不支持的机制。

答案 2 :(得分:1)

Heimdal GSSAPI库支持SPNEGO,NTLMv1 / v2和KRB5。它们还有原始的NTLM库,您可以使用它来自己实现协议。

https://www.h5l.org/manual/HEAD/gssapi/