Windows客户端何时使用Initiator首选NegoEx for SPNEGO?

use*_*622 6 java kerberos active-directory spnego single-sign-on

尝试通过SPNEGO和Kerberos对Windows客户端(IE/Firefox)进行身份验证.服务器端是Java/Tomcat,带有用于SPNEGO身份验证的JCIFS.在Win 2008 R2服务器上托管服务器端时,SSO(Kerberos)auth工作正常.但是,当在2012服务器上时,它失败了GSSException: Defective token detected.

通过网络跟踪深入挖掘我发现,在工作的情况下,IE客户端发送带有4个mechTypes的协商令牌:

  • 1.2.840.48018.1.2.2 - MS KRB5,
  • 1.2.840.113554.1.2.2 - KRB5,
  • 1.3.6.1.4.1.311.2.2.30 - NEGOEX,和
  • 1.3.6.1.4.1.311.2.2.10 - NTLMSSP

在这种情况下,我的服务器端将完成SPNEGO选择MS KRB5.但是,在问题的情况下,IE客户端只发送带有2个mechtypes的令牌 - NEGOEXNTLMSSP.这是首选的发起人.Java不支持NEGOEX,因此失败.

一些搜索显示此问题与JDK*中的错误或DNS问题有关.但是,我在最新的JDK和DNS似乎没问题.所以我的问题是,Windows中的浏览器什么时候切换到SPNEGO中的NEGOEX?为什么?我找到的最接近的答案是在msdn博客中说的Kerberos is not available since it's not in a domain environment.但是,客户端确实在域环境中并klist显示有效的Kerberos票证.如果它确实是一个域问题,究竟可能是根本原因,我该如何避免这个问题呢?


  • 脚注,一些背景研究信息:JDK8已经在GSS机制中看到了许多修复.在jdk8u40和jdk8u45中有些东西被破坏了.然后在jdku65中进一步修复.这本来是要实现NEGOEX一个错误报告被关闭了修复

    "修复SPNEGO,允许NEGOEX出现并绕过"

    但是,我不确定NEGOEX是否真的有效.NEGOEX IETF标准在RFC过期状态下被放弃了.所以我怀疑它是否真的得到了Java,库的支持.