JEP 113:MS-SFU Kerberos 5 扩展
概述
将 MS-SFU 扩展 添加到 JDK 的 Kerberos 5 实现中。
目标
- 实现 MS-SFU S4U2self 协议
- 实现 MS-SFU S4U2proxy 协议
- 确保实现与当前的 MS 和 MIT 实现具有互操作性。
动机
在典型的网络服务中,前端(例如,Web 服务器)通常需要代表客户端访问后端(例如,数据库服务器)。Kerberos 5 支持委派,但要求所有层都使用 Kerberos。在某些情况下,客户端和前端之间的身份验证不是通过 Kerberos 进行的(例如,客户端使用摘要认证登录到 Web 服务器),因此没有 Kerberos 凭据可供委派。微软定义了针对用户的 Service for User (S4U) 扩展,以便前端仍然可以在没有客户端凭据的情况下代表客户端访问后端。
此外,使用标准的 Kerberos 5 委派(微软称之为开放式委派),一旦你授予一个服务账户委派的能力,它就可以委派给任何服务。这意味着在使用此权限时需要非常小心。另一方面,MS-SFU 委派(微软称之为受约束的委派)则安全得多。在这里,管理员可以精确控制特定服务可以委派给哪些服务。
Microsoft 自 Windows Server 2003 开始使用 S4U,MIT Kerberos 5 实现最近也支持该功能(在 krb5-1.8 中)。
描述
S4U 包含了在 RFC 4120 中定义的原始 Kerberos 协议的两个扩展:Service-for-User-to-Self (S4U2self),它允许前端服务代表用户获取一张到自身的 Kerberos 服务票据;以及 Service-for-User-to-Proxy (S4U2proxy),它允许前端服务代表用户获取一张到第二个后端服务的服务票据。
总的来说,这两个扩展使前端服务能够代表用户获取 Kerberos 服务票据。所得到的服务票据可以用于:
- 请求服务自身的相关信息。
- 服务所在机器的本地访问控制,模拟用户进行操作。
- 向其他服务发起请求,模拟用户进行操作。
我们将提供一些新的公共 JGSS-API 来支持此功能。还可能会添加新的配置文件和/或系统属性。
替代方案
我们还可以增强原生的 JGSS 提供程序,以利用来自原生 Kerberos 实现的现有 S4U 功能。
测试
- JDK 内部的功能测试。S4U 对测试 KDC 的支持
- 与 Microsoft Active Directory 和 MIT 的 Kerberos 5 实现的互操作性测试。
影响
- JCP:对 JCP 无影响
- 其他 JDK 组件:对其他 JDK 组件无影响
- 兼容性:影响极小
- 安全性:对安全性无影响
- 可移植性:对可移植性无影响
- 用户界面:无图形用户界面
- CCC:新的 JGSS-API,很可能为
GSSContext
添加新方法,可能新增配置文件和系统属性 - 文档:在 JGSS 部分新增文档/教程
- 国际化:影响极小,可能会添加新的错误消息
- 本地化:影响极小,可能会添加新的错误消息
- 法律:MS-SFU 发布在 Microsoft Open Specification 下
- 其他:无其他已知影响