pet*_*erh 16 java sspi spnego gssapi negotiate
要在Windows上使用Java进行客户端HTTP SPNEGO身份验证,您需要设置Windows注册表项allowtgtsessionkey.这是有据可查的.我不明白的是人们如何解决这个问题?为了单个软件,大多数企业站点永远不会接受在Windows中更改此注册表项.如果需要在组织中的每个工作站上更改它,请考虑一下麻烦.但这只是理论,因为我到目前为止还无法说服我们的任何客户更改此注册表项.
我不怪他们.大多数企业管理员会认为这样可以放松安全性并因此反对它.
我已经读过: 在Java或命令行工具中是否有办法使用本机SSPI API获取服务的Kerberos票证?
但它现在已经很老了.
所以我真的,真的不明白人们如何使Windows + Java客户端+ Kerberos可以在除大学环境,家庭用户等之外的任何地方工作.
我从公司管理员那里得到的问题是"当IE和Firefox等应用程序在没有设置此密钥的情况下执行SPNEGO时没有问题时,我们为什么需要设置此注册表项?".好吧,我知道答案是什么.这是因为(很可能)IE和Firefox等应用程序基于Windows本机GSS API(SSPI),而Sun的Java使用自己的实现.
我假设使用像WAFFLE这样的东西可以解决问题,但我赞成纯Java解决方案.我还假设使用基于Java的解决方案(如Spring安全性或Apache HttpClient)无济于事,因为它们都会遇到这个问题.
任何帮助或指针将不胜感激.
更新1:
我发现Oracle的bug数据库中有一个RFE.还有一个由Oracle员工就此问题提交的补丁以及有关此功能的JDK邮件列表的讨论.除了我能理解的这一点在目前的Java 7中是不可用的,甚至不是实验性的,都不会让我更加明智.对?
更新2:
现在问题在OpenJDK Security Dev邮件列表上再次存在.
Mic*_*l-O 10
感谢您在security-dev邮件列表中引用我的线程;-)我的中期目标是通过认可的类路径使这个补丁可用于Java 6+.您可能对我最近创建的这张WAFFLE票证感兴趣:https://github.com/dblock/waffle/issues/50
我也评估了WAFFLE,但它不像Java-GSS那样必须创建重复的代码,这是我想要避免的一切.
整个问题并非甲骨文的错.Microsoft只是通过LSA CallPackage功能阻止对会话票证的任何调用.借口是安全.我真的很想知道当我无法合理访问TGT时,SSPI如何能够创建服务票证.因此这种封闭源解决方案很糟糕.
目前,您只有三种选择:
我已经埋没了糟糕的注册表项,因为它无论如何都不适用于具有域帐户的本地管理员.在我的例子中,Windows上的Tomcat开发者在此期间使用了Java的kinit.
| 归档时间: |
|
| 查看次数: |
7361 次 |
| 最近记录: |