为什么IE不在Linux上向我的JBoss发送Kerberos票证信息?

时间:2013-06-27 10:20:23

标签: internet-explorer jboss kerberos spnego

我正在尝试使用Windows客户端和JBoss实现SSO。拥有我的开发PC,JBoss在Windows 7上运行,在开发服务器上运行,它运行在(Red Hat)Linux上。

有一个JBoss Negotiation Toolkit,可以让我检查Negiation标头是否正确到达。

只要我使用BasicNegotiation在我自己的PC上运行JBoss,localhost测试就可以正常工作。发送的标头是

  

Authorization: Negotiate YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIKB...(加上更多字节)

测试的回答是

  

谈判工具包   基本谈判   WWW-Authenticate - 谈判YHgGBisGAQUFAqBuMGygMDAuBgorBgEEAYI3AgIK ......

     

NegTokenInit   消息Oid - SPNEGO   机械类型 - {NTLM} {Kerberos V5 Legacy} {Kerberos V5} {1.3.6.1.4.1.311.2.2.30}   需求标志 -   机械令牌-TlRMTVNTUAABAAAAl7II4gQABAAyAAAACgAKACgAAAAGAbAdAAAAD0lQSUVWMTAwMjVJUElF   机械清单麦克风 -

但是在Linux服务器上,同样的测试不起作用。基本原因(我猜)是标题看起来不同:

  

Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbAdAAAADw==

然后JBoss Negotiation Toolkit回退到NTML身份验证,这是我不想要的,并且在webapp的输出中显示为错误。

  

谈判工具包   NTLM谈判   WWW-Authenticate - 谈判TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAAAAdAAAADA ==

     

NTLM - Negotiate_Message   警告,这是NTLM,只支持SPNEGO!   协商标志 - (encryption56Bit)(explicitKeyExchange)(sessionKeyExchange128Bit)   negotiateVersion)(NTLM2)(alwaysSign)(NTLM)(lmKey)(符号)(requestTarget)(OEM)(Unicode)的   域名= null - {length = 0} {maxLength = 0} {offset = 0}   工作站名称= null - {length = 0} {maxLength = 0} {offset = 0}   版本 - ?

我将Internet Explorer和Firefox配置为发送Negotiation标头,它们都与Linux服务器一起失败。

我做错了什么?

顺便说一句:我在某处看到Windows总是在本地计算机上发送Kerberos Negotiation标头 - 这是真的吗?

4 个答案:

答案 0 :(得分:2)

我的Internet Explorer用于发送NTLM标头而不是kerberos标头。原因:Windows在其保险箱中为同一主机保存了密码。

在保险箱中输入的用户和密码与我的Windows帐户不同,但它没有任何区别。只有服务器名称(甚至不是完全限定的)才是相关的。

坦克到http://www.msxfaq.de/verschiedenes/kerberosbrowser.htm进行解释(德语)。

Windows safe

答案 1 :(得分:1)

感谢您的回答。在我们的例子中,问题是我们有两个Windows域。我试图使用域B中的Windows浏览器访问域A中的Linux服务器。显然,这不起作用...

答案 2 :(得分:0)

浏览器发送NTLM类型1令牌,因为Kerberos失败,因为您的AD / DNS设置不正确。这种行为是正确的。修复您的DNS设置。

答案 3 :(得分:0)

以下是可能出现问题的一个很好的总结:https://www.pingidentity.com/support/answers/index.cfm/why-am-i-not-getting-a-kerberos-ticket?id=90640000000CaWgAAK

我总是通过wireshark捕获来查看浏览器和服务之间的通信,以及浏览器和AD之间的通信。在你的情况下,问题可能在于后者。例如,一旦我使用http://myGoodLookingDNSAlias地址作为服务,该地址被解析为http://realBadLookingServerName,但我忘了注册后者。因此浏览器从AD收到KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN错误,并且没有发送票证。

此致 安德拉什