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等)和对应的配置文件,其中配置文件的默认如下:

操作系统缺省位置
Windowsc:\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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Windows 系统下部署 Kerberos 服务,通常可分为以下几个步骤: 1. 安装 Active Directory 域服务。Kerberos 服务是基于 Active Directory 的,因此需要安装和配置 Active Directory 域服务。 2. 创建 Kerberos Realm。使用 Active Directory 管理工具创建 Kerberos Realm,该 Realm 的名称通常与 Active Directory 域名称相同。 3. 创建 Kerberos Principal。在 Kerberos Realm 中创建 Kerberos Principal,该 Principal 通常对应着一个用户或服务。 4. 生成 Keytab 文件。Keytab 文件包含了 Kerberos Principal 的加密密钥,可以用于 Kerberos 身份验证。使用 ktpass 命令生成 Keytab 文件。 5. 配置 Kerberos 应用程序。在应用程序中配置 Kerberos 身份验证,包括指定 Kerberos 库的位置和 Keytab 文件的位置。 下面是一个简单的教程,介绍如何在 Windows Server 中部署 Kerberos 服务: 1. 安装 Active Directory 域服务。在 Windows Server 上,打开 Server Manager,选择 Add Roles and Features,然后选择 Active Directory Domain Services 进行安装。 2. 创建 Kerberos Realm。使用 Active Directory Users and Computers 管理工具,创建一个新的 Active Directory 域,该域的名称就是 Kerberos Realm 的名称。 3. 创建 Kerberos Principal。在 Active Directory Users and Computers 中创建一个新的用户或服务账户,该账户就是 Kerberos Principal。 4. 生成 Keytab 文件。打开命令行工具,使用 ktpass 命令生成 Keytab 文件。例如,以下命令将创建一个 Keytab 文件,用于 Kerberos Principal "user1@EXAMPLE.COM": ``` ktpass /out user1.keytab /princ user1@EXAMPLE.COM /mapuser user1 /pass password /ptype KRB5_NT_PRINCIPAL /crypto AES256-SHA1 ``` 5. 配置 Kerberos 应用程序。在应用程序中设置 Kerberos 身份验证,包括指定 Kerberos 库的位置和 Keytab 文件的位置。例如,在 Java 应用程序中,可以通过设置系统属性来指定 Kerberos 库和 Keytab 文件的位置: ``` System.setProperty("java.security.auth.login.config", "krb5.conf"); System.setProperty("java.security.krb5.realm", "EXAMPLE.COM"); System.setProperty("java.security.krb5.kdc", "kdc.example.com"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); System.setProperty("sun.security.krb5.debug", "true"); System.setProperty("sun.security.spnego.debug", "true"); System.setProperty("sun.security.jgss.debug", "true"); System.setProperty("sun.security.spnego.initiate", "true"); System.setProperty("sun.security.spnego.targetName", "HTTP/server.example.com@EXAMPLE.COM"); System.setProperty("javax.net.ssl.trustStore", "truststore.jks"); System.setProperty("javax.net.ssl.trustStorePassword", "password"); System.setProperty("javax.net.ssl.keyStore", "keystore.jks"); System.setProperty("javax.net.ssl.keyStorePassword", "password"); ``` 以上是一个简单的 Kerberos 部署教程,实际情况可能更为复杂。如果您需要更详细的教程,建议参考 Microsoft 的官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值