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