Squid Web Cache Wiki

Squid Web Cache 文档

🔗 特性:协商身份验证

🔗 详细信息

Negotiate 是 GSSAPI 的一个包装协议,而 GSSAPI 本身又是 Kerberos 或 NTLM 身份验证的包装。为什么是包装的包装?目前 Microsoft 以外的人都不知道。GSSAPI 本身就足够了。

真正重要的是,支持它意味着支持到 MS Windows 域的透明 Kerberos 身份验证。它比 NTLM 安全得多,并且对域控制器造成的负担也小得多。

有关 Squid 支持的其他方案以及身份验证总体工作原理的详细信息,请参阅 Features/Authentication

🔗 在 Squid 中如何工作?

Negotiate 协议同时非常简单和有些复杂。Squid 的部分被故意保持得很小且简单,以提高整体系统的安全性。

身份验证辅助程序负责执行所有危险的安全加密和验证过程。Squid 最初可能会联系它以获取一个挑战令牌,然后将其盲目地转发给客户端。客户端提供的任何凭据或令牌都会原封不动地传递给辅助程序。

下面将描述用于此目的的协议行。相同的协议用于联系 NTLM 和 Negotiate 身份验证辅助程序。这使得 Squid 能够通过一个协议配置同时支持 Negotiate/Kerberos 和 Negotiate/NTLM 风格。

:information_source: 这种双重支持确实会导致一些管理上的混乱,当辅助程序不支持与客户端浏览器相同的风格时。

:information_source: 由于 NTLM 的状态性,这些认证器方案不支持并发。

🔗 从 Squid 接收的输入行

request [credentials] [key-extras]

request 是请求代码之一

YR 需要一个新的挑战令牌。这是两个进程之间的第一次通信。当 Squid 由于 auth_param 的 max_challenge_lifetime 和 max_challenge_uses 参数需要新挑战时,也可能随时发生。辅助程序应响应 TT 消息。
KK 验证用户的凭据。辅助程序响应 OKERRAFNABH 中的一个。

credentials 是在 HTTP 头部中收到的精确编码的 blob。此字段仅在 KK 请求上发送。

key-extras 是传递给辅助程序的附加参数,可以通过 auth_paramkey_extras 参数进行配置。仅在 Squid-3.5 及更高版本中可用。

🔗 发回给 Squid 的结果行

result [token label] [kv-pair] [message]

result 是结果代码之一

TT 成功。呈现一个新的挑战 token 值。
AF 成功。有效凭据。从 Squid-3.4 开始,被 OK 结果弃用。
NA 成功。无效凭据。从 Squid-3.4 开始,被 ERR 结果弃用。
OK 成功。有效凭据。
ERR 成功。凭据无效。
BH 失败。帮助程序遇到问题。

:information_source: OKERR 结果代码仅被 Squid-3.4 及更新版本接受。

token 是一个新的挑战值。根据 RFC 2045 的定义,令牌是 base64 编码的。

:information_source: 注意:Squid-3.3 及更早版本的 NTLM 认证器接口不支持 token 字段。Negotiate 认证器接口在 TTAFNA 响应时需要它。

:information_source: 此字段不得在 OKERRBH 响应上发送。

label 是 Squid 用于此客户端请求的“用户名”。此字段仅在 AF 响应上接受。在任何其他结果代码响应上都不得发送。

kv-pair:一个或多个 key=value 对。此接口上保留的键名

clt_conn_tag=… 标记客户端 TCP 连接 (Squid-3.5)
group=… reserved
message=… Squid 可以在错误页面上显示的字符串消息。
tag=… reserved
token=… 要使用的令牌,根据 RFC 2045 进行 base64 编码。此字段仅在 OK 响应上使用。
ttl=… reserved
user=… Squid 用于此客户端请求的“用户名”标签。对于 Negotiate 和 NTLM 协议,它通常分别具有 NAME@DOMAIN 或 NAME\DOMAIN 的格式。
*_=… 以 (_) 结尾的键名保留给本地管理员使用。

:information_source: kv-pair 字段仅被 Squid-3.4 及更新版本接受。

:information_source: 此辅助程序返回的 kv-pair 可以通过 %note logformat 代码进行日志记录。

message 是 Squid 可以在错误页面上显示的字符串。此字段仅在 NABH 响应上接受。从 Squid-3.4 开始,此字段已被 BH 响应上的 message= kv-pair 弃用。

🔗 支持 NEGOTIATE 的 Squid 原生 Windows 构建

🔗 测试

🔗 测试 Squid

通过 Squid 发送任何带有 GET 或其他请求的 URL。

squidclient http://example.com/

正确配置的 Squid 将回复 Proxy-Authenticate: Negotiate,如下所示

HTTP/1.1 407 Proxy Authentication Required
Server: squid/3.2.0.14
Mime-Version: 1.0
Date: Thu, 12 Jan 2012 03:41:33 GMT
Proxy-Authenticate: Negotiate
...

🔗 从 Unix 测试 win32 辅助程序

如果您想测试 Unix 端的东西,实际上有一种方法可以从 Unix 盒子访问 win32 辅助程序,那就是执行一次“授权的中间人攻击”,如下所示

🔗 故障排除

🔗 令牌类型错误

客户端最初提供的令牌用于辅助程序识别正在使用的风格

您可能会看到提及这些令牌类型的警告或错误,尤其是在使用 Kerberos 辅助程序配置 Negotiate 身份验证时,类型 1 的问题尤其常见。

问题在于客户端和辅助程序的功能不匹配。negotiate_wrapper 辅助程序是目前唯一已知的能够同时处理这两种类型的辅助程序。

类别:功能

导航:站点搜索站点页面类别🔼 向上