我在为intranet网站设置SSO时遇到问题。目前我正在使用Tomcat8.0和Waffle1.8.4。它们工作得很好,但只有一个问题:浏览器(按照此处和此处所述应用设置后的Firefox和IE(不能进行Kerberos身份验证,只能进行NTLM身份验证。
我用Wireshark分析了流量,Tomcat发送http
头字段"WWW-Authenticate",浏览器在头字段"Authentication"中回答一个base64编码的字符串,其中包含NTLMSSP。我想这不是Kerberos,是吗?
我读到一篇文章(WWW身份验证使用NTLM而不是Kerberos(,说要使Kerberos工作,必须使用命令setspn.exe在AD中注册服务器。我试图为setspn(在这里描述(获得正确的语法,但没有任何运气。服务器具有以下参数:
-
IP:10.0.1
-
服务:Tomcat Http
-
端口:8080
-
帐号名称:company net\foobar
我将此命令用于setspn:
setspn -A "HTTP/10.0.0.1:8080 company-netfoobar"
但不起作用。服务器和客户端都在同一个Windows域中,使用Windows 10。
它怎么了?
我还需要什么吗?
Kerberos依赖DNS(有效主机名(和SPN来运行。到目前为止,你似乎已经做了一些研究,这很好。不太为人所知的是,当你将一个工作良好的Kerberos客户端指向主机的IP,而不是它的DNS主机名时,Kerberos将被绕过,取而代之的是回退身份验证机制——在这种情况下是NTLM。
Michael-O,这个论坛的顶级Kerberos贡献者,在2012年的回答中说得最好:
Kerberos不适用于IP地址,它依赖于域名和仅正确的DNS条目。