0

我尝试使用 NTLM 在 Windows 域中创建 SSO,并且在不在 Windows 域中的 Linux 机器上使用 Apache2 服务器没有服务器模块。不知道这是否可能。但我现在向你展示我已经想出的东西以及我接下来要知道的东西。

好的,首先我打开了我的浏览器(IE 和 FF)发送Authorization带有 NTLM 数据(消息类型 1)的标头的选项。这有效,我得到一个字符串,如:

NTLMSSP²¢1 (±USERS-PCDOMAIN

但接下来是什么?我必须将此字符串发送到我的 AD 运行的服务器吗?所以我的服务器被称为SERVER1.DOMAIN并具有 IP 192.168.1.14

我现在可以使用哪种协议以及以哪种方式将消息类型 1 发送到我的 AD 服务器以获取 NTLM 质询消息(类型 2)?

我想我必须写这样的东西:

<?php

$fp = fsockopen("192.168.1.14", 80 /* <--- which port? */, $errno, $errstr, 30);

if (!$fp)
    die("$errstr ($errno)");

fwrite($fp, $headers['Authorization'] . "\r\n");

$ntlmChallengeData = '';

while (!feof($fp)) {
    $ntlmChallengeData .= fgets($fp, 128);
}

fclose($fp);

var_dump($ntlmChallengeData); // The challenge data

但是 Windows Server 在哪个端口上响应我的 NTLM 数据?

4

1 回答 1

1

仅使用 PHP 是不可能的。验证 NTLMv2 凭据需要使用 Active Directory DC 的 NETLOGON 服务的 SecureChannel 加密 RPC。轻描淡写地说这是一件很难的事情。

在 Linux 环境中,您最好的选择可能是查看 Samba“winbind”包并在 Apache 级别进行身份验证。这些模块在 IMO 中总是有点笨拙,但 mod_auth_kerb 和 mod_auth_winbind 是我上次检查过的这类东西的标准模块。

于 2014-09-12T02:09:52.787 回答