Skip to content

JEP 113: MS-SFU Kerberos 5 Extensions | MS-SFU Kerberos 5 扩展

摘要

在 JDK 的 Kerberos 5 实现中添加MS-SFU 扩展

目标

  1. 实现 MS-SFU S4U2self 协议
  2. 实现 MS-SFU S4U2proxy 协议
  3. 确保实现与当前 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 功能。

测试

  1. JDK 内部的功能测试。针对测试 KDC 的 S4U 支持。
  2. 与 Microsoft Active Directory 和 MIT 的 Kerberos 5 实现的互操作性测试。

影响

  • JCP:对 JCP 无影响
  • 其他 JDK 组件:对其他 JDK 组件无影响
  • 兼容性:影响极小
  • 安全性:对安全性无影响
  • 可移植性:对可移植性无影响
  • 用户界面:无图形用户界面
  • CCC:新的 JGSS-API,很可能是 GSSContext 的新方法,可能包括新的配置文件和系统属性
  • 文档:在 JGSS 部分添加新的文档/教程
  • 国际化:影响极小,可能会添加新的错误消息
  • 本地化:影响极小,可能会添加新的错误消息
  • 法律:MS-SFU 根据 Microsoft Open Specification 发布
  • 其他:已知无其他影响