Windows下配置浏览器使用Kerberos (SPNEGO)
目录:
- Windows下配置浏览器使用Kerberos (SPNEGO)
- 适用场景
- Windows GSSAPI/KERBEROS环境配置
- 安装MIT KERBEROS
- 配置kerberos环境
- 配置JCE
- 配置Firefox
- 后谈
- 小结
- 参考链接:
适用场景
本示例适用场景满足以下情况:
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
将用户名principal和密码输入,验证通过后获取Ticket:
配置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
小结
- windows的向后兼容和自定制优化功能很强大,但是有些时候会变成配置阻碍
- 了解不全的时候只通过单个专业信息搜查资料不一定能解决问题
参考链接:
- https://hg.mozilla/mozilla-central/file/fd2da289a3c1/extensions/auth
- https://hg.mozilla/mozilla-central/annotate/fd2da289a3c1/extensions/auth/nsAuthGSSAPI.cpp
- https://developer.mozilla/En/Integrated_Authentication
- https://developer.mozilla/en/Mozilla_Source_Code_Directory_Structure
- https://www.ibm/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rsec_SPNEGO_config_krb5.html
Windows下配置浏览器使用Kerberos (SPNEGO)
目录:
- Windows下配置浏览器使用Kerberos (SPNEGO)
- 适用场景
- Windows GSSAPI/KERBEROS环境配置
- 安装MIT KERBEROS
- 配置kerberos环境
- 配置JCE
- 配置Firefox
- 后谈
- 小结
- 参考链接:
适用场景
本示例适用场景满足以下情况:
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
将用户名principal和密码输入,验证通过后获取Ticket:
配置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
小结
- windows的向后兼容和自定制优化功能很强大,但是有些时候会变成配置阻碍
- 了解不全的时候只通过单个专业信息搜查资料不一定能解决问题
参考链接:
- https://hg.mozilla/mozilla-central/file/fd2da289a3c1/extensions/auth
- https://hg.mozilla/mozilla-central/annotate/fd2da289a3c1/extensions/auth/nsAuthGSSAPI.cpp
- https://developer.mozilla/En/Integrated_Authentication
- https://developer.mozilla/en/Mozilla_Source_Code_Directory_Structure
- https://www.ibm/support/knowledgecenter/zh/SSAW57_8.5.5/com.ibm.websphere.nd.multiplatform.doc/ae/rsec_SPNEGO_config_krb5.html