【问题标题】:Kerberos authorization doesn't work on Chrome and FireFox, but works on IEKerberos 授权不适用于 Chrome 和 FireFox,但适用于 IE
【发布时间】:2017-10-14 02:12:50
【问题描述】:

我按照guide 将 cas 与 Windows AD 集成。

几天前它在每个浏览器上都能正常工作。但它不仅适用于 IE,当我使用 firefox 浏览器时,仅将“Negotiate TlRMTVNTUAABAAAAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==”发送到服务器,然后浏览器返回 cas 登录页面。

最近才在生产环境中发现这个问题。我有一个配置相同的测试环境,但到目前为止它运行良好。

我知道当 kerberos 票证没有缓存在本地时,浏览器会发送“Negotiate TlRMT...”。但是我可以使用 klist 命令查看票证,它适用于 IE 意味着 票还行。

我猜可能是windows客户端或广告服务器的一些配置造成的,谁能给我一些建议,tks!

https://1056-app.test.com”已经添加到 Firefox 上的“network.negotiate-auth.trusted-uris”。我也尝试过 重新安装firefox,不行。

铬:55

IE:11

火狐:56

Clinet 浏览器操作系统:Windows 7

AD 服务器操作系统:Windows Server 2008 R2

Cas 服务器操作系统:Suse11Sp3

这是 FireFox 上的 http 转储

GET https://1056-app.test.com/cas/login 401 Unauthorized

Response Headers
Server : nginx/1.8.0
Date : Fri, 13 Oct 2017 10:38:08 GMT
Content-Type : text/html;charset=UTF-8
Transfer-Encoding : chunked
Connection : keep-alive
Pragma : no-cache
Expires : Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control : no-cache
WWW-Authenticate : Negotiate
Content-Language : en-US
Content-Encoding : gzip
Vary : Accept-Encoding

Request Headers
Host : 1056-app.test.com
User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language : en-US,en;q=0.5
Accept-Encoding : gzip, deflate, br
Cookie : JSESSIONID=EE40B3C3FAFB30D13F45DC612E4D383ECC95916DBE12BEDDE21E9D933893964A4EB867271389530BC8A4B6E9B485E944B952
Connection : keep-alive
Upgrade-Insecure-Requests : 1




GET https://1056-app.test.com/cas/login 401 Unauthorized

Response Headers
Server : nginx/1.8.0
Date : Fri, 13 Oct 2017 10:38:08 GMT
Content-Type : text/html;charset=UTF-8
Transfer-Encoding : chunked
Connection : keep-alive
Pragma : no-cache
Expires : Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control : no-cache
Content-Language : en-US
Content-Encoding : gzip
Vary : Accept-Encoding

Request Headers
Host : 1056-app.test.com
User-Agent : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0
Accept : text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language : en-US,en;q=0.5
Accept-Encoding : gzip, deflate, br
Cookie : JSESSIONID=EE40B3C3FAFB30D13F45DC612E4D383ECC95916DBE12BEDDE21E9D933893964A4EB867271389530BC8A4B6E9B485E944B952
Connection : keep-alive
Upgrade-Insecure-Requests : 1
Authorization : Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==

客户端上的 klist

Client: huangq @ SWI.TEST.NET
Server: HTTP/1056-app.test.com @ SWI.TEST.NET
KerbTicket Encryption Type: RSADSI RC4-HMAC(NT)
Ticket Flags 0x40a00000 -> forwardable renewable pre_authent
Start Time: 10/13/2017 12:52:34 (local)
End Time:   10/13/2017 22:11:01 (local)
Renew Time: 10/20/2017 12:11:01 (local)
Session Key Type: RSADSI RC4-HMAC(NT)

客户端上的setspn -Q cmd

C:\Users\huangq>setspn -Q HTTP/1056-app.test.com
Checking domain DC=swi,DC=test,DC=net
CN=SOWSLdapA,OU=Service,OU=_Users,DC=swi,DC=test,DC=net
    HTTP/1056-app.test.com
Existing SPN found! 

keytab 创建命令

ktpass.exe /out D:\\1056-app.keytab /princ HTTP/1056-app.test.com@SWI.TEST.NET /pass xxx /mapuser SOWSLdapA@swi.test.net /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT

【问题讨论】:

  • 您没有提及您的 Windows AD 版本以及运行 CAS 的操作系统类型。
  • 运行以下命令,请将完整结果粘贴回去:setspn -Q HTTP/1056-app.test.com
  • 已添加,谢谢回复。
  • 转到 SOWSLdapA 帐户上的“帐户”选项卡。向下滚动到该选项卡的底部,选中 AES128 和 AES256 的复选框,然后重试。
  • 这是我们的生产环境,我无法在线进行此更改。但我已经在我的测试环境(相同的配置)上尝试过,cas 服务器抛出异常“KrbException:无效参数(400)-找不到适当类型的密钥来解密 AP REP-使用 HMAC SHA1-96 的 AES256 CTS 模式”

标签: google-chrome firefox kerberos spnego negotiate


【解决方案1】:

找到了根本原因。因为我们用cname做dns,而cname和spn地址不匹配。

我用这个命令打开firefox协商调试日志。link

set NSPR_LOG_MODULES=negotiateauth:5
set NSPR_LOG_FILE=C://firefox.log
./firefox.exe

firefox.log

[Lazy Idle]: D/negotiateauth   Sending a token of length 9800
[Main Thread]: D/negotiateauth   service = 1056-app.test.com
[Main Thread]: D/negotiateauth   using negotiate-sspi
[Main Thread]: D/negotiateauth   nsAuthSSPI::Init
[Main Thread]: D/negotiateauth Using SPN of [HTTP/***-nginx-elb-***.eu-west-1.elb.amazonaws.com]

解决方法:

1.将DNS改为A型

2.修改浏览器以禁用kerberos cname 查找。铬link。火狐不支持。

参考:

https://www.chromium.org/developers/design-documents/http-authentication

【讨论】:

    猜你喜欢
    • 2012-01-27
    • 2012-02-14
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多