为了在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 Security或Apache HttpClient,也无法解决这个问题。
非常感谢任何帮助或指导。 更新1: 我发现在Oracle的错误数据库中有一个关于这个问题的RFE。还有一个由Oracle员工提交的关于这个问题的补丁,以及关于这个功能的JDK邮件列表上的讨论。除了我能理解的这个功能在当前的Java 7中不可用,甚至没有试验性的版本,这并没有让我更明智。对吗?
更新2:
现在,在OpenJDK安全开发邮件列表上,这个问题又有了新的进展。
我不怪他们。大多数公司管理员会认为这是放宽了安全性,因此会反对这样做。
我读到了这个: 在Java中或者使用本机SSPI API的命令行工具中,有没有一种方法来获取一个服务的Kerberos票证? 但这已经相当陈旧了。
所以我真的,真的不明白人们是如何让Windows + Java客户端 + Kerberos在除了大学环境、家庭用户等之外的其他环境中工作的。
企业管理员问我的问题是:“为什么我们需要设置这个注册表键,而像IE和Firefox这样的应用程序在不设置这个键的情况下可以正常执行SPNEGO?”嗯,我知道答案。这是因为(很可能)像IE和Firefox这样的应用程序是基于Windows本地GSS API(SSPI),而Sun的Java使用了自己的实现。
我假设使用类似WAFFLE这样的东西可以解决问题,但我更倾向于纯Java解决方案。我还假设使用基于Java的解决方案,如Spring Security或Apache HttpClient,也无法解决这个问题。
非常感谢任何帮助或指导。 更新1: 我发现在Oracle的错误数据库中有一个关于这个问题的RFE。还有一个由Oracle员工提交的关于这个问题的补丁,以及关于这个功能的JDK邮件列表上的讨论。除了我能理解的这个功能在当前的Java 7中不可用,甚至没有试验性的版本,这并没有让我更明智。对吗?
更新2:
现在,在OpenJDK安全开发邮件列表上,这个问题又有了新的进展。