Kerberos认证中浏览器如何确定需要对接的KDC服务器?
问题解答
1. 需要创建的SPN
HTTP服务的SPN遵循固定格式:HTTP/<服务完整域名>@<KERBEROS_REALM>,结合你的场景参数:
- 服务域名:
www.xyz.example.com - Kerberos Realm:
EXAMPLE.COM(行业惯例Realm统一使用全大写,如果你明确配置为小写example.com也可正常使用)
最终需要创建的SPN为:HTTP/www.xyz.example.com@EXAMPLE.COM
你可以直接在Linux KDC服务器上通过kadmin.local工具执行创建和keytab导出操作:
# 创建SPN,禁用密码登录,生成随机密钥 kadmin.local -q "addprinc -randkey HTTP/www.xyz.example.com@EXAMPLE.COM" # 导出keytab文件,后续需要将该文件放到应用服务器指定路径,配置服务读取 kadmin.local -q "ktadd -k /opt/kerberos/http.keytab HTTP/www.xyz.example.com@EXAMPLE.COM"
2. 浏览器联系KDC的逻辑
浏览器本身不会独立处理Kerberos票据请求和KDC寻址,所有Kerberos逻辑都是调用客户端操作系统原生的Kerberos协议栈实现的,具体寻址规则由客户端的Kerberos配置决定:
Linux/macOS 客户端
- 首先读取本地
/etc/krb5.conf配置文件的[domain_realm]段,匹配服务域名对应的Realm,你需要添加如下配置完成域名到Realm的映射:[domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM - 再读取
[realms]段下对应Realm的KDC地址配置,示例配置:[realms] EXAMPLE.COM = { kdc = kdc01.example.com kdc = kdc02.example.com # 可配置多个KDC做高可用 admin_server = kdc01.example.com } - 如果
krb5.conf中没有配置明确的KDC地址,系统会自动发起DNS SRV记录查询,查询目标为_kerberos._udp.EXAMPLE.COM,DNS返回的SRV记录对应的IP就是需要对接的KDC服务器。
Windows 客户端
- 若客户端已加入对应Kerberos域,会优先读取本地域缓存中的KDC地址;
- 无缓存时同样会查询对应Realm的DNS SRV记录获取KDC地址。
前置注意事项
你需要提前在浏览器中开启对应域名的SPNEGO支持,否则浏览器不会发起Kerberos认证请求:
- Chrome/Edge:启动时添加参数
--auth-server-whitelist="*.example.com" - Firefox:在
about:config配置页修改network.negotiate-auth.trusted-uris值为*.example.com
内容的提问来源于stack exchange,提问作者Shivangi Bhardwaj
相关产品推荐
相关产品推荐

