2011-06-20 84 views
3

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

在此先感谢。

+0

你正在发送'WWW-Authenticate:Negotiate'头文件吗?客户端将尝试Kerberos身份验证,而不是NTLM。 –

+0

我认为答案是否定的 - GSSAPI只能执行Kerberos。为什么要使用NTLM而不是Kerberos? –

+0

@爱德华汤姆森GSSAPI *可以*做NTLM。 GSSAPI中的G表示* generic *。 Kerberos和NTLM是GSSAPI可以使用的几种*机制中的两种*机制。 –

回答

1

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

1

我不确定Heimdal图书馆和它是否与GSS合作,但gss ntlm ssp明确声称是一个gss图书馆。 我期望您需要下载并构建它,然后您需要在Debian和Ubuntu上设置/ etc/gss/mech(或/ usr/etc/gss/mech)来指向该库。 Ther构建系统将在其示例目录中的mech文件中创建一个您需要的示例。

您可能会遇到麻烦,在spnego下运行此操作。当Windows将NTLM作为协商包最受欢迎的机制时,它将发送原始NTLM令牌而不是RFC 4178中定义的SPNEGO令牌。它肯定会通过gss_accept_sec_context指示不受支持的机制。