Kerberos授权不适用于Chrome和FireFox,但适用于IE

Kerberos授权不适用于Chrome和FireFox,但适用于IE

问题描述:

我遵循此guide将cas与Windows AD集成。Kerberos授权不适用于Chrome和FireFox,但适用于IE

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

最近才在生产环境中发现此问题。我有一个测试环境具有相同的配置,但它现在工作正常。

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

我想这可能是由windows客户端或广告服务器的一些配置引起的,任何人都可以给我一些建议,tks!

https://1056-app.test.com” 已经添加到Firefox的 “network.negotiate-auth.trusted-URI的”。而且我也试图用 重新安装firefox,不起作用。

铬:55

IE:11

火狐:56

客户为例浏览器操作系统:Windows 7

AD

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

CAS服务器OS :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! 

密钥表创建命令

ktpass.exe /out D:\\1056-app.keytab /princ HTTP/[email protected] /pass xxx /mapuser [email protected] /ptype KRB5_NT_PRINCIPAL /crypto RC4-HMAC-NT 
+0

你没有提到你的Windows AD的版本,而CAS上运行的操作系统的类型。 –

+1

运行以下命令,并粘贴完整结果:* setspn -Q HTTP/1056-app.test.com * –

+0

已添加,tks用于回复。 – zhufeizzz

找到了根本原因。因为我们对dns使用cname,并且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查找。 Chrome link。 Firefox不支持。

参考:

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