Windows下配置浏览器使用Kerberos (SPNEGO)

Windows下配置浏览器使用Kerberos (SPNEGO)

目录:

适用场景

本示例适用场景满足以下情况:
1. 访问开启kerberos的hadoop集群WebUI界面,如ResourceManager、NameNode、Hive等
2. 其他通过Kerberos (SPNEGO)实现HTTP验证的页面
3. windows环境
4. Firefox浏览器

Windows GSSAPI/KERBEROS环境配置

在windows端实现kerberos(SPNEGO)的验证,需要让浏览器能找到其对应的kerberos/gssapi类库(gssapi64.dll/gssapi32.dll等)和对应的配置文件,其中配置文件的默认如下:

操作系统 缺省位置
Windows c:\winnt\krb5.ini
Linux /etc/krb5.conf
其他基于 UNIX 的系统 /etc/krb5/krb5.conf
z/OS /etc/krb5/krb5.conf

Note: 如果 krb5.ini 文件不在 c:\winnt 目录中,那么它可能位于 c:\windows 目录中。

可以通过环境变量进行自定义配置参数的设置,也可以通过修改浏览器的参数进行设置,如在火狐中可通过访问about:config 页面进行参数调整:

network.negotiate-auth.gsslib
network.negotiate-auth.using-native-gsslib
……

由于对应的项比较繁琐,可以通过安装MIT KERBEROS进行默认情况的安装简化配置:

安装MIT KERBEROS

windows使用的kerberos客户端叫KFW,当前最新版本为KFW 4.1(64)/KFW 4.1(32),也可以通过访问KFW 下载列表 获得版本列表进行选择下载。以下以64位环境举例,32位环境请对照替换关键目录,如Program Files 替换为Program Files(x86)

安装完成后会进行默认的PATH环境变量配置,将安装目录下的bin目录配置进去,安装完成后可以校验一下。默认情况会安装到C:\Program Files\MIT\Kerberos 路径,同时在C:\ProgramData\MIT\Kerberos5 路径下生成kerberos的配置文件krb5.ini

PS: 为保险起见,可以同步替换c:\winnt\或c:\windows\下的krb5.ini

配置kerberos环境

将集群上kdc相关的配置文件krb5.conf中的内容同步到krb5.ini中,然后启动MIT Kerberos
MIT Kerberos
将用户名principal和密码输入,验证通过后获取Ticket:
Get Ticket
KFW界面

配置JCE

由于kerberos校验和加解密用到密钥长度远超出jre默认的安全字符长度,所以需要到java官网上下载Java Cryptography Extension (JCE),然后解压到%JAVA_HOME%/jre/lib/security中替换相应的文件。

配置Firefox

windows下Firefox需要通过访问about:config 页面调整以下参数:
1. network.negotiate-auth.trusted-uris 允许使用gssapi链接验证的地址
2. network.auth.use-sspi 关闭sspi验证协议
3. network.negotiate-auth.delegation-uris 代理委托地址,不建议使用

其中参数1或3在各类官方文档均有记载,参数3是代理时才使用,同时由于安全性可靠性考虑不推荐,而参数2则是windows各种方便使用的默认配置的坑:windows下的Firefox自带sspi这个安全认证协议,而且优先度很高,linux及其他环境下则多没有,因此Firefox在配置network.negotiate-auth.trusted-uris 仍然会优先使用sspi协议进行安全验证,导致出现出现如下报错信息(JCE未升级也会报下面的错):

HTTP ERROR: 403

Problem accessing /index.html. Reason:

    GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)

Powered by Jetty://

后谈

登录成功后可以通过浏览器打开对应的页面,同时在MIT Kerberos中也可以看到出现了除krbtgt以外的归属于HTTP的一条新ticket:
这里写图片描述

另外Firefox报错很不明显,可以通过如下方式打开调试模式打印报错内容:
Firefox 的调试日志:

set NSPR_LOG_MODULES=negotiateauth:5
set NSPR_LOG_FILE=c:\firefox_in_domain_negotiateauth.log
...\firefox.exe -console

set NSPR_LOG_MODULES=all:5
set NSPR_LOG_FILE=c:\firefox_in_domain_debug.log

...\firefox.exe -console

小结

  1. windows的向后兼容和自定制优化功能很强大,但是有些时候会变成配置阻碍
  2. 了解不全的时候只通过单个专业信息搜查资料不一定能解决问题

参考链接:

  1. https://hg.mozilla.org/mozilla-central/file/fd2da289a3c1/extensions/auth
  2. https://hg.mozilla.org/mozilla-central/annotate/fd2da289a3c1/extensions/auth/nsAuthGSSAPI.cpp
  3. https://developer.mozilla.org/En/Integrated_Authentication
  4. https://developer.mozilla.org/en/Mozilla_Source_Code_Directory_Structure
  5. https://www.ibm.com/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rsec_SPNEGO_config_krb5.html

猜你喜欢

转载自blog.csdn.net/taisenki/article/details/80774317
今日推荐