1. Windows下Kerberos认证全流程指南在企业内部网络环境中很多关键服务比如Hadoop集群的WebUI、数据可视化平台等都采用Kerberos认证来保障安全。作为系统管理员我经常需要在Windows电脑上访问这些受保护的资源。刚开始接触Kerberos时我也被各种票据、SPN、realm这些概念绕得头晕直到后来摸清了从客户端配置到浏览器访问的完整链路。下面就把这套经过实战验证的方法分享给大家。整个流程可以拆解为四个关键步骤首先是安装MIT Kerberos客户端工具然后配置krb5.ini文件定义域关系接着通过密码或keytab文件获取服务票据最后配置Firefox浏览器实现自动认证。每个环节都有容易踩坑的细节比如隐藏的配置文件路径、浏览器的特殊参数等我会结合自己的踩坑经验详细说明。2. 安装MIT Kerberos Ticket Manager2.1 获取安装包MIT Kerberos的Windows客户端是整套流程的基础工具包。官方推荐从MIT官网下载最新版本目前稳定版是4.1版本不过国内访问可能较慢。我在实际部署时通常会提前下载好安装包分发百度网盘上也有热心网友分享的资源搜索关键词MIT Kerberos for Windows能找到多个资源。安装过程没什么特别要注意的基本就是一路Next。但建议勾选Add MIT Kerberos to system PATH选项这样后续在命令行直接使用kinit、klist等工具会更方便。安装完成后默认会在C:\Program Files\MIT\Kerberos下生成程序文件同时在C:\ProgramData\MIT\Kerberos5创建配置目录——这个ProgramData目录默认是隐藏的需要先在文件夹选项中开启显示隐藏的文件、文件夹和驱动器。2.2 验证安装装好后可以打开命令提示符测试基础功能klist如果看到类似klist: No credentials cache found的提示而不是命令不存在说明基础组件安装成功。这时候你的系统已经具备了Kerberos客户端能力就像给Windows装上了能识别特殊通行证的眼睛。3. 配置krb5.ini文件3.1 配置文件位置krb5.ini相当于Kerberos系统的地图告诉客户端去哪里找认证服务器、如何识别各个王国realm。这个文件默认路径是C:\ProgramData\MIT\Kerberos5\krb5.ini。我遇到过好几次新人配置失败的情况都是因为没注意到ProgramData是隐藏文件夹。建议直接用记事本管理员身份打开编辑或者用以下命令快速定位notepad C:\ProgramData\MIT\Kerberos5\krb5.ini3.2 关键配置项配置文件主要包含三大区块这里用我们公司测试环境的配置举例[libdefaults] default_realm WANWEI.COM dns_lookup_realm false ticket_lifetime 24h renew_lifetime 7d forwardable true [realms] WANWEI.COM { kdc cdh3.wanwei.com admin_server cdh3.wanwei.com } [domain_realm] .wanwei.com WANWEI.COM wanwei.com WANWEI.COM重点说明几个容易出错的参数default_realm必须与KDC服务器配置完全一致包括大小写ticket_lifetime决定票据有效期生产环境建议不超过24小时domain_realm部分要注意域名通配符的写法前导点表示所有子域名曾经有个同事把admin_server错写成admin_servercdh3漏了域名后缀导致票据更新总是失败。这种错误kinit时不会报错但后续操作会出各种奇怪问题。4. 获取Kerberos票据4.1 密码认证方式最基础的认证方式就是输入用户名密码获取TGT票据授予票据kinit usernameREALM.COM执行后会提示输入密码。成功后可以用klist查看klist正常输出应该显示票据缓存信息包含客户端principal、KDC服务器和有效期。如果看到Ticket cache: API:...而不是文件路径说明用的是Windows自带的SSPI缓存这时建议在krb5.ini中添加[libdefaults] default_ccache_name FILE:C:\temp\krb5cache强制使用文件缓存避免与浏览器认证冲突。4.2 Keytab文件认证对于自动化场景推荐使用keytab文件相当于密码的加密版本。假设已有user.keytab文件kinit -kt user.keytab usernameREALM.COMKeytab文件通常由域管理员生成下发要特别注意文件权限设置——我遇到过因为keytab被意外修改导致认证失败的案例。建议将keytab放在专用目录并设置严格的ACL权限。测试时如果kinit失败可以加-d参数开启调试模式kinit -d -kt user.keytab usernameREALM.COM常见的错误包括时间不同步Kerberos要求客户端和服务端时间差不超过5分钟、域名解析失败、防火墙拦截88端口等。5. 浏览器SPNEGO认证配置5.1 Firefox专项配置Chrome从91版本开始移除了对SPNEGO的支持所以必须使用Firefox。关键配置步骤如下地址栏输入about:config搜索并修改以下参数network.negotiate-auth.trusted-uris .wanwei.com,internal.hadoop network.auth.use-sspi false network.negotiate-auth.delegation-uris .wanwei.com重启浏览器其中trusted-uris的值要包含所有需要Kerberos认证的域名多个域名用英文逗号分隔不能有空格。有个项目组曾经因为多写了个空格导致认证始终不生效排查了半天才发现问题。5.2 验证浏览器认证访问目标WebUI时应该能直接进入而不弹出密码框。如果失败可以检查klist确认当前有有效票据在Firefox地址栏输入about:support查看配置首选项中negotiate相关参数是否正确按F12打开开发者工具观察Network标签页中401/407状态码有个特别隐蔽的坑点是主机名大小写问题。比如KDC中注册的SPN是HTTP/host01.wanwei.com但用户访问的是http://Host01.wanwei.com就会因为大小写不匹配导致认证失败。这种时候要么统一大小写要么在krb5.ini的domain_realm段添加对应映射。6. 常见问题排查6.1 时间同步问题Kerberos对时间同步极其敏感。建议配置Windows时间服务与内部NTP服务器同步w32tm /config /syncfromflags:manual /manualpeerlist:ntp.server w32tm /resync曾经有个生产环境故障就是因为某台Windows主机的时间快了11分钟导致所有Kerberos认证失败。现在我们的运维规范里强制要求所有服务器配置NTP同步。6.2 票据缓存冲突当同时存在Windows SSPI缓存和MIT Kerberos缓存时可能会出现奇怪的行为。可以通过设置环境变量明确指定set KRB5CCNAMEC:\temp\krb5cache或者在krb5.ini中配置default_ccache_name。我习惯在调试时用klist -A查看所有缓存中的票据比单纯用klist更全面。6.3 防火墙设置Kerberos需要开放以下端口KDC TCP/UDP 88KDC TCP 464KDC TCP 749如果使用kadmin很多企业的办公网络会限制这些端口导致认证失败。可以用telnet测试连通性telnet kdc.server 88如果连不通需要联系网络团队放行。有个客户现场就遇到过因为UDP 88端口被拦截导致只能kinit成功但后续服务认证失败的情况。