在对Hadoop集群施加安全认证的过程中,往往会有需要开启对应服务组件Web UI认证的需求。在启用认证后,如果直接使用浏览器打开Web UI页面,都会提示需要进行认证。
大部分情况下,都会用到下面几个步骤,来在Windows上打开需要认证的Web UI:
但相信很多小伙伴还有一个疑问:难道我只能使用Firefox浏览器吗?接下来我们就来仔细看看这个问题。
首先我们需要了解一个知识,Kerberos V5只是一种协议,但实际能实现这种协议的软件实际上并不止一种。
其中MIT KDC与Active Directory在CDH一直以来就支持的,而Red Hat IPA是在CDH 6.X中新增支持的。
实际的实施中,一般是不会使用Active Directory的,因为集群所使用的操作系统基本上都是Linux。如果没有特别高级的功能需求,一般也不会使用Red Hat IPA。所以绝大部分真正实施的项目中,都是采用MIT KDC,这也是网络上的教程中最常见的选择。我这里测试集群也是使用MIT KDC。
接下来按照官方文档(https://docs.cloudera.com/documentation/enterprise/5-8-x/topics/cdh_sg_browser_access_kerberos_protected_url.htm)的说明,尝试去配置IE和Chrome浏览器,按照官方文档,IE和Chrome浏览器在Windows平台上的配置方式是一模一样的:
配置本地Intranet
确保勾选了前两个选项:包括没有列在其他区域的所有本地(Intranet)站点、包括所有不使用代理服务器的站点。
单击高级,将Kerberos HTTP SPNEGO保护的域名逐个添加到网站列表中。例如,http://myhost.example.com。点击关闭。
单击确定保存配置更改
配置局域网认证
接下来在cmd中使用kinit命令,或MIT Kerberos Windows的GUI中登录;
尝试打开一个施加了Kerberos Web UI认证的网页(如HDFS NameNode UI);
直接得到一条报错信息,告诉你GSSHeader找不到正确的标记:
HTTP ERROR: 403 Problem accessing /index.html. Reason: GSSException:
Defective token detected(Mechanism level: GSSHeader did not find the
right tag) Powered by Jetty://
接下来继续修改Internet选项,在高级中直接去除“启用集成Windows验证”:
重新访问Web UI,这个时候报错信息改变了,直接会告诉你,需要验证!
接下来你可以将认证信息销毁,甚至将MIT Kerberos Windows客户端卸载,不管怎么操作,都会告诉你,需要验证!
原因在于,启用集成Windows验证,实际上就是IE浏览器唯一能支持Kerberos认证的方式。其背后实现就是SSPI,Security Support Provider Interface(Microsoft安全支持提供器接口)。入口函数在secur32.dll中。IE浏览器并没有办法去调用MIT Kerberos Windows客户端的GSSAPI验证方式。
微软的产品都经常与自家的产品或协议有着紧密的结合度,所以IE不能使用GSSAPI的方式并不意外。
但是为什么Chrome也没有办法正常打开呢?
在https://www.chromium.org/developers/design-documents/http-authentication中,有几句关键的话:
“ When a server or proxyaccepts multiple authentication schemes,
our network stack selects theauthentication scheme with the highest
score(当一个服务器或代理接受多个认证方案时,我们的网络堆栈选择得分最高的认证方案:):
•Basic: 1
•Digest: 2
•NTLM: 3
•Negotiate: 4 ”
“On Windows, Negotiate is implemented using the SSPI libraries anddepends on code in
secur32.dll. (在Windows上,Negotiate是使用SSPI库实现的,并且依赖于secur32.dll中的代码。)”
由于在Windows平台上,Chrome使用SSPI代替了GSSAPI实现Negotiate,而且没有什么选项参数能让Chrome去进行GSSAPI方式的认证(如果有找到的同学欢迎留言交流),所以Chrome自然也就跟着IE一起跪了。
同时,这也是为什么CDH官方文档中,Windows平台下配置Chrome和IE一样,都依赖控制面板中Internet选项的原因。
而Firefox浏览器中,有选项network.auth.use-sspi来控制是否优先使用SSPI,如果不使用,就会转向使用GSSAPI了,这也就是为什么Firefox浏览器配合MIT Kerberos Windows客户端,能正常在Windows平台上打开认证的Web UI的原因。
如果KDC类型为MIT KDC或IPA :
在Windows上,必须使用Firefox + MIT Kerberos Windows客户端进行认证
在Linux 上,可通过Kerberos客户端 + Firefox / Chrome进行认证
如果KDC类型为ActiveDirectory:
在Windows上,需要按照官网文档对应的步骤进行配置,并且当前计算机登录了对应AD域,才能使用Firefox/Chrome/IE打开需要认证的网页。
在Linux 上,与其他KDC类型的步骤一致。(是的,Linux上是能使用Active Directory的)
实际的实施过程中,特别是金融行业等注重安全风险的行业内,对于生产环境的操作机都有严格的策略限制。掌握好Firefox + MIT Kerberos Windows客户端进行认证的方式,就能应对绝大部分的情况。
当然,如果你使用的是诸如华为FusionInsight HD之类的发行版,就没有这种烦恼了,在FusionInsight HD中对这部分内容进行了改造集成,Kerberos的Web UI认证都进行了统一,只要在FusionInsight Manager中正常登录,便可在任意的现代浏览器中进行浏览。