java - 人们如何使 Java SPNEGO 客户端在 Windows 中工作?

标签 java spnego gssapi sspi negotiate

为了在 Windows 上使用 Java 进行客户端 HTTP SPNEGO 身份验证,您需要设置 Windows 注册表项 allowtgtsessionkey .这是有据可查的。我不明白的是人们如何解决这个问题?大多数公司站点永远不会接受为了单个软件而更改 Windows 中的此注册表项。如果需要在组织中的每个工作站上进行更改,还要考虑麻烦。但这只是理论,因为到目前为止我无法说服我们的任何客户更改此注册表项。

我不怪他们。大多数公司管理员会认为这是一种放松的安全措施,因此会反对它。

我读过这个: Is there a way in Java or a command-line util to obtain a Kerberos ticket for a service using the native SSPI API?

但是现在已经很老了。

所以我真的非常不明白人们如何让 Windows + Java 客户端 + Kerberos 在大学环境、家庭用户等以外的任何环境下工作。

我从公司管理员那里得到的问题是“当 IE 和 Firefox 等应用程序执行 SPNEGO 没有问题时,为什么我们需要设置此注册表项而无需设置此注册表项?”。好吧,我知道答案是什么。这是因为(很可能)IE 和 Firefox 等应用程序基于 Windows 原生 GSS API (SSPI),而 Sun 的 Java 使用自己的实现。

我假设使用类似 WAFFLE 的东西会解决问题,但我更喜欢纯 Java 解决方案。我还假设它不会帮助使用基于 Java 的解决方案,例如 Spring 安全或 Apache HttpClient,因为它们都会遇到这个问题。

如有任何帮助或指点,我们将不胜感激。

更新 1:

我发现有一个 RFE为此,在 Oracle 的错误数据库中。还有一个 patch submitted on the matter由甲骨文员工和discussions on the JDK mailing list about this feature .据我所知,这并没有让我变得更聪明,这在当前的 Java 7 中是不可用的,甚至不是实验性的。对吧?

更新 2:

现在的问题是alive again在 OpenJDK 安全开发邮件列表上。

最佳答案

感谢您在 security-dev 邮件列表中引用我的帖子 ;-) 我的中期目标是通过认可的类路径使此补丁可用于 Java 6+。您可能对我最近创建的这张 WAFFLE 票感兴趣:https://github.com/dblock/waffle/issues/50

我也评估过 WAFFLE,但它不像 Java-GSS,以至于必须创建重复代码,这是我想尽一切办法避免的事情。

这整个问题不完全是 Oracle 的错。 Microsoft 只是通过 LSA CallPackage 函数阻止对 session 票证的任何调用。借口是安全。我真的很想知道当我无法合理访问 TGT 时,SSPI 是如何创建服务票证的。因此,这种闭源解决方案很糟糕。

目前,您只有三个选择:

  1. 通过Java方式再次获取TGT
  2. 试试华夫饼
  3. 编写自定义代码

我已经埋下了糟糕的注册表项,因为无论如何它都不适用于具有域帐户的本地管理员。就我而言,Windows 上的 Tomcat 开发人员同时求助于调用 Java 的 kinit。

关于java - 人们如何使 Java SPNEGO 客户端在 Windows 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556119/

相关文章:

java - 在java中查找特定文件路径是否存在(不是常规搜索,寻找高效算法)

spring-boot - Spring Boot + Ldap/AD + Kerberos SSO : KrbCryptoException - Checksum failed

java - 我应该如何将 SPNEGO 身份验证添加到没有第 3 方库的 servlet

java - Kerberos 与 Java

Java/C# Kerberos 互操作可能吗?

java - hibernate中Set和List之间如何选择

java - 使用 RecyclerView.Adapter 过滤大量条目

java - cucumber Java : Does not recognize a Long data type

Java GSSAPI : Compare two GSSCredential Instances

python - 如何安装 GSSAPI Python 模块?