Kerberos授权在Chrome和FireFox上无法工作,但在IE上可以。

5

我按照这个指南来将cas与Windows AD集成。

几天前,它在所有浏览器上都正常工作。但现在只有在IE上使用时才有效,当我使用Firefox浏览器时,仅向服务器发送“Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==”,然后浏览器返回cas登录页面。

最近只在生产环境中发现了这个问题。我有一个相同配置的测试环境,但直到现在都运行良好。

我知道当本地未缓存Kerberos票证时,浏览器会发送“Negotiate TlRMT...”。但是我可以用klist命令看到票证,并且在IE上运行意味着票证没问题。

我猜这可能是由于Windows客户端或AD服务器的某些配置引起的,是否有人能给我一些建议,谢谢!

"

已将 "https://1056-app.test.com" 添加到 Firefox 的 "network.negotiate-auth.trusted-uris" 中。我还尝试重新安装 Firefox,但没有效果。

Chrome:55

IE:11

FireFox:56

客户端浏览器操作系统: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运行的操作系统类型。 - T-Heron
1
运行以下命令,并请将完整结果粘贴回来:setspn -Q HTTP/1056-app.test.com - T-Heron
已添加,谢谢回复。 - zhufeizzz
这是我们的生产环境,我不能在线进行此更改。但是我已经在我的测试环境(相同配置)上尝试过了,cas服务器抛出异常“KrbException:无效参数(400)-找不到适当类型的密钥以解密AP REP-AES256 CTS模式与HMAC SHA1-96”。 - zhufeizzz
你可以使用 Fiddler 在客户端进行调试。你能发布一下你的 keytab 创建语法吗?你可以将其作为问题的编辑。 - T-Heron
显示剩余6条评论
1个回答

5

已经找到了根本原因。由于我们使用CNAME进行DNS解析,而CNAME与SPN地址不匹配。

我使用以下命令打开Firefox Negotiate调试日志。链接

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查找。Chrome 链接。Firefox不支持。

参考资料:

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


由于这个回答仍然是在谷歌搜索“Firefox Kerberos”时排名前列的结果,因此我可能要为您提供此信息,针对Linux用户:snap 版本的 Firefox 无法与 Kerberos 正常工作!请参考此指南安装 Firefox 的 apt 版本,它也适用于 Ubuntu 22.10: 如何使用 apt 安装 Firefox - fips

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接