启用Kerberos后,Windows上浏览器访问CDH页面的那些事

前言

在对Hadoop集群施加安全认证的过程中,往往会有需要开启对应服务组件Web UI认证的需求。在启用认证后,如果直接使用浏览器打开Web UI页面,都会提示需要进行认证。

大部分情况下,都会用到下面几个步骤,来在Windows上打开需要认证的Web UI:

  1. 安装Firefox浏览器
  2. 安装MIT Kerberos Windows客户端
  3. 配置krb5.ini文件
  4. 配置Firefox的高级选项:
    network.negotiate-auth.trusted-uris中设置需要访问的主机名
    network.auth.use-sspi设置为关闭
  5. 进行Kerberos认证,认证成功后打开对应的WebUI页面。

但相信很多小伙伴还有一个疑问:难道我只能使用Firefox浏览器吗?接下来我们就来仔细看看这个问题。


分析过程

首先我们需要了解一个知识,Kerberos V5只是一种协议,但实际能实现这种协议的软件实际上并不止一种。

在CDH中,我们可以使用三种不同类型的KDC:
启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第1张图片

其中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

  1. 打开控制面板。选择 Internet选项。
  2. 选择安全选项卡。
  3. 选择本地Intranet 并单击站点按钮。
    启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第2张图片

确保勾选了前两个选项:包括没有列在其他区域的所有本地(Intranet)站点、包括所有不使用代理服务器的站点。
启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第3张图片

单击高级,将Kerberos HTTP SPNEGO保护的域名逐个添加到网站列表中。例如,http://myhost.example.com。点击关闭。

启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第4张图片

单击确定保存配置更改

启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第5张图片

配置局域网认证

  1. 打开控制面板。选择 Internet选项。
  2. 选择安全选项卡。
  3. 选择本地Intranet 单击自定义级别…按钮打开“安全设置-Intranet区域”对话框。
    启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第6张图片
  4. 向下滚动到用户身份验证选项,并选择仅在Intranet区域中自动登录。
    启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第7张图片
    单击确定保存这些更改。

接下来在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验证”:
启用Kerberos后,Windows上浏览器访问CDH页面的那些事_第8张图片

重新访问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的原因。


总结

  1. 如果KDC类型为MIT KDC或IPA :
    在Windows上,必须使用Firefox + MIT Kerberos Windows客户端进行认证
    在Linux 上,可通过Kerberos客户端 + Firefox / Chrome进行认证

  2. 如果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中正常登录,便可在任意的现代浏览器中进行浏览。


↓扫码关注 咕噜咕噜大数据 公众号↓

咕噜咕噜大数据

你可能感兴趣的:(大数据安全,CDH,大数据,kerberos,hadoop)