人们怎样在Windows的Java客户端SPNEGO工作?(How do people make J

2019-07-18 20:07发布

为了做客户端的HTTP SPNEGO认证的Java在Windows,你需要设置Windows注册表键allowtgtsessionkey 。 这是有据可查的。 我不明白的是人们解决这个怎么弄? 大多数企业网站决不会接受改变此注册表项在Windows的单件的软件的缘故。 想想也麻烦,如果这需要组织中的每个工作站上进行改变。 但是,这只是理论,因为我迄今未能说服任何客户更改此注册表项。

我不怪他们。 大多数企业管理者会看到这是一个放松的安全性,因此会反对它。

我读过这样的: 有没有在Java中的方式或命令行UTIL以获得使用本地SSPI API的服务的Kerberos票据?

但现在已是相当陈旧。

所以,我真的,真的不明白人们是如何使Windows + Java客户端+ Kerberos的工作,对任何事情,但学校环境,家庭用户等。

我从企业管理者获得的问题是“为什么我们需要在应用程序,如IE和Firefox都没有问题的话SPNEGO 没有设置该键设置此注册表项?”。 好吧,我知道答案。 这是因为(最有可能),像IE和Firefox应用都是基于Windows本地GSS API(SSPI),而Sun公司的Java使用它自己的实现。

我假设使用类似WAFFLE会解决这个问题,但我赞成一个纯Java的解决方案。 我也假设,这将不利于使用基于Java的解决方案,例如Spring安全或Apache HttpClient的,因为它们都将被从这个问题的痛苦。

任何帮助或指针将不胜感激。

UPDATE1:

我发现有一个RFE Oracle的bug数据库这一点。 还有一个提交了关于此事的补丁由甲骨文员工和讨论有关此功能的JDK邮件列表上 。 没有让我比,据我能理解这么多聪明另一种是不提供当前的Java 7,甚至还不如实验。 对?

UPDATE2:

现在的问题是复活了 OpenJDK的安全开发邮件列表。

Answer 1:

谢谢引用安全-dev邮件列表上我的线程;-)我的中期目标是通过认可类路径,使这个补丁可用于Java 6+。 您可能会感兴趣这是我最近创建了这个WAFFLE票: https://github.com/dblock/waffle/issues/50

我已经评价过WAFFLE但它是如此不-Java的GSS-这样一个具有创建重复的代码,这是我想避免一切手段。

这整个问题是不完全Oracle的故障。 微软简单地阻止通过LSA到会话票证任何呼叫CallPackage功能。 借口是安全的。 我真的想知道SSPI是如何能够当我不能获得合理的TGT创建服务票证。 因此,这样的封闭源溶液吸收。

现在,此刻,你只有三种选择:

  1. 通过Java来再次获得TGT
  2. 尝试WAFFLE
  3. 编写自定义代码

我已经安葬蹩脚的注册表项,因为它没有为本地管理员适用于域帐户反正。 在我的情况下,在Windows上的Tomcat开发我都使出调用Java的使用kinit在其间。



Answer 2:

现在有这个一个非常好的解决方案包含在Apache HTTP客户端,使用JNA摆脱本地SSPI API的车票。 看到这个答案:

https://stackoverflow.com/a/22865583/381161



文章来源: How do people make Java SPNEGO client work in Windows?