我们有一个 tomcat 服务器,使用 spring-security kerberos 根据活动目录对网页上的用户进行身份验证。
大约有 25 个域控制器。
该站点有两个基于 CNAME 的 DNS 别名。
该站点当前有一个服务 ID,其 SPN 已为 DNS A 记录以及每个 CNAME 注册。
虽然现在一切正常,但我不知道如何在不造成停机的情况下可靠地更改此配置。
原因是客户端缓存了 Kerberos 票证:
http://www.juniper.net/techpubs/en_US/uac4.2/topics/concept/user-role-active-directory-about.html
“kerbtray.exe”程序有助于查看和删除端点上的 Kerberos 票证。如果更新了 SPN 或更改了密码,则必须从端点清除旧票证(假设端点仍缓存了先前向 MAG 系列设备发出的 SPNEGO 请求的票证副本)。在测试期间,您应该在每次身份验证请求之前清除票证。
用于检查/删除缓存票证的“klist”程序描述: http://technet.microsoft.com/en-us/library/hh134826.aspx
因此,如果连接到我的 Web 服务器的每个客户端(运行 Windows 的用户)都有 Kerberos 票证,而这些票证在我更新 SPN 或密码后立即失效,我该如何确保更改无缝进行?是否有任何可以安全完成的操作?我不能只要求所有用户安装 klist 并删除他们的旧票证。
答案1
在 unix 方面,实现此目的的策略是将密钥的新旧副本都保留在服务的密钥表中。Kerberos 会保留密钥的版本号,而当出示服务票证时,kerberos 库会检查密钥表,以确定要使用的正确版本。
KDC 中只能有一个版本的密钥,但只要服务器上的密钥表中有新旧版本的密钥,您的客户端就不会出现服务中断的情况。如果您能解释如何为服务安装密钥表,我可能会提出一些建议。
答案2
也许您应该测试添加 SPN,而不是更改现有的 SPN。安全主体可以有多个 SPN。