用于NTLM身份验证的GSSAPI

GSSAPI for NTLM authentication

本文关键字:GSSAPI 身份验证 NTLM 用于      更新时间:2023-10-16

是否可以使用GSSAPI进行NTLM v1/v2身份验证?我正在尝试构建一个web服务器,很像squid/apache,但我想验证那些可能使用IE/FireFox、使用NTLM/协商协议的客户端。我尝试过使用海姆达尔库,但就是无法让gss_accept_sec_text正常工作。它只是以"请求了不受支持的机制"失败。我可以确认,在尝试gss_accept_sec_text之前调用gss_acquire_cred时,服务主体名称、spnego的OID等确实正确。是的,当然,我通过base64解码授权头提取了从客户端接收的令牌。我正在使用C++,并在debian上进行实验。我相信这里的一个神奇的黑客知道更多,希望能分享一些重要的线索。

提前感谢。

Heimdal的NTLM库也支持客户端。您可以使用库基元生成类型1、类型2和类型3的消息,并且它将起作用。然而,我不知道你能不能在Heimdal的顶部使用GSS-API来达到这个目的。我想那个测试,你也可以这样做。

我不确定Heimdal库以及它是否能与GSS一起使用,但GSS-ntlm-ssp特别声称自己是一个GSS库。我想你需要下载并构建它,然后你需要设置/etc/gss/mech(或Debian和Ubuntu上的/usr/gss/mec)来指向库。构建系统将在其examples目录中的mech文件中创建一个您需要的示例。

在spnego下运行此程序可能会遇到问题。当Windows将NTLM作为协商包的最首选机制时,它会发送原始NTLM令牌,而不是RFC 4178中定义的SPNEGO令牌。不过,这个代码肯定会让你走得更远;它肯定会超过gsaccept_sectext,指示不支持的机制。

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

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