Squid Web Cache Wiki

Squid Web Cache 文档

🔗 特性:Bearer 认证

🔗 详细信息

Bearer 是 OAuth 2.0 的一部分,在 RFC 6750 中创建的 HTTP 认证方案。想要访问某项服务的客户端需要找到该服务信任的控制服务器,向该控制服务器进行身份验证并获取一个不透明的令牌。该不透明令牌通过 HTTP 认证头传递给 HTTP 服务,该服务授予或拒绝访问。

🔗 安全影响

Bearer 令牌可以有两种方式使用,这两种方式在安全性方面差异很大。

令牌对除颁发它的 OAuth 控制服务器和验证它的验证器之外的所有人都是不透明的。它们不一定包含任何形式的客户端凭据,即使包含,用于将详细信息编码到其中的加密方法也具有任意的安全性。

然而,在某些配置下,令牌本身可能会被第三方拦截并重放(重用),以在短时间内获得对该服务的访问权。当令牌生成为随机 blob 或作为加密用户身份的容器时,它们等同于 Digest 随机数。

  1. 在安全形式下,Bearer 令牌被视为随机数,并且不能重放。随机数令牌比
    • NTLM 和传统的(用户:密码)Basic 认证更安全,
    • 比弱形式的 Digest 认证更安全,
    • 大致相当于增强的(用户:编码令牌)Basic 认证,
    • 大致相当于(或低于)具有真正随机数行为的强形式 Digest 认证,
    • 不如 Negotiate 认证安全。
  2. 在弱形式下,Bearer 令牌在 TTL(生存时间)期间允许重放。风险级别随着 TTL 的延长而增加。使用短暂但非零 TTL 的 Bearer 认证比
    • 传统的(用户:密码)Basic 认证更安全,
    • 大致相当于 NTLM 认证和弱形式的 Digest 认证,
    • 大致相当于增强的(用户:编码令牌)Basic 认证,
    • 不如具有真正随机数行为的强形式 Digest 认证安全,
    • 不如 Negotiate 认证安全。

:x: 由于 OAuth 提供的安全性较弱,建议仅在 HTTPS 连接上使用 Bearer 认证

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

🔗 它在 Squid 中如何工作?

Bearer 协议既非常简单又有些复杂。Squid 的部分被有意地保持得很小且简单,以提高整体系统的安全性。

:warning: Squid 仅实现 Authorization 头字段 Bearer 令牌。备用的表单字段方法与 HTTP 代理的需求不兼容,而URI 查询参数方法则过于不安全,不可信。

身份验证辅助程序负责执行所有危险的安全加密和验证过程。客户端提供的任何凭据或令牌都会原封不动地传递给辅助程序。辅助程序向 Squid 提供用户名用于日志记录,并提供 TTL 值用于管理后续请求中的令牌。

用于执行此操作的协议行如下所述。

从 Squid 接收的输入行

channel-ID b64token [key-extras]

返回给 Squid 的结果行

channel-ID result [kv-pair]

🔗 我需要做些什么来在 Squid 中支持 Bearer?

与任何其他安全协议一样,Squid 中的 Bearer 支持由两部分组成:

  1. Squid 内部与客户端通信的代码。
    • Squid-3.5 或更高版本,并使用 --enable-auth-bearer 编译。
  2. 一个或多个执行繁重工作的身份验证辅助程序。
    • 目前还没有免费的辅助程序。

当然,为了让一切正常工作,需要在配置文件中启用该协议。

auth_param bearer program /usr/sbin/your-helper
auth_param bearer realm Squid
auth_param bearer scope proxy

:information_source: 所有其他 Bearer 参数都是可选的。有关更多详细信息,请参阅 auth_param BEARER 部分。

🔗 测试

🔗 测试 Squid

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

squidclient http://example.com/

设置正确的 Squid 会响应 Proxy-Authenticate: Bearer,如下所示。

HTTP/1.1 407 Proxy Authentication Required
Server: squid/3.5.0
Date: Thu, 12 Jan 2012 03:41:33 GMT
Proxy-Authenticate: Bearer realm="Squid", scope="proxy"
...

通过 Squid 发送带有 GET 和 Bearer 令牌的任何 URL。

squidclient -H 'Proxy-Authorization: Bearer abcd\n' http://example.com/

设置正确的 Squid 会响应请求的资源,如下所示。

HTTP/1.1 200 OK
...

🔗 故障排除

Bearer 认证使用级别 29 进行调试。

分类: WantedFeature

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