栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“检测到GSSException Defective令牌”-尝试使用Kerberos对Windows上运行的Tomcat进行身份验证时

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“检测到GSSException Defective令牌”-尝试使用Kerberos对Windows上运行的Tomcat进行身份验证时

错误“ 检测到有缺陷的令牌 ”很可能意味着 检测到 了ntlm令牌。如果kerberos失败,这就是协商机制在流行的Web浏览器中使用的-
否则Web服务器未指示。在窗户上操作系统,它上面的IE
Web浏览器(和Firefox,如果配置正确)基本上说,如果您不使用Kerberos,我将向您发送一个NTLM令牌。服务器回复“没有办法”,我什至都不知道NTLM,所以我称您发送给我的内容有缺陷。由于您似乎是第一次进行此设置,因此当Kerberos失败时,您可能未配置任何后备机制(例如NTLM),因此该错误消息。我们通过了解Kerberos为什么会失败来解决此问题。我想我在两个地方看到了您的问题失败的原因,这与SPN和受信任的站点有关。即使您解决了这两项,也存在与加密有关的第三个原因和第四个原因,为什么它可能继续失败。

  1. HTTP服务的spn与浏览器输入的URL不匹配。这些需要匹配,否则Kerberos将失败。要正常工作,浏览器应使用:http : //kerberos500.nickis.life : 8080,而不是http://nickis.life:8080。我说的是根据您在keytab创建语法中看到的内容。在此过程中,您已将SPN编码为:HTTP/kerberos500.nickis.life@NICKIS.LIFE。这就是为什么您需要使用http://kerberos500.nickis.life:8080的原因。当您告诉浏览器访问http://nickis.life:8080时,浏览器将不知道如何访问您的Web服务。使用该顶级URL,浏览器假定它需要查找在Active Directory 域控制器上运行的Web服务。(假设只有nickis.life的任何内容都可以在域控制器上运行)。出于安全考虑,DC永远不要运行Web服务器。
  2. 您需要在IE设置下将http://kerberos500.nickis.life添加为“受信任的站点”。另外,*。nickis.life也可以。(实际上称为“受信任的站点”时,您将其称为“受信任的角色”)。
  3. 您将Kerberos加密类型限制为DES-CBC-MD5。从Windows Server 2008 Active Directory R2开始,默认情况下禁用DES。如今,DES是一种过时且通常不安全的加密类型。使用AES128更好,甚至使用AES256更好。您可以通过以下示例重新生成密钥表来解决此问题。
  4. 在AD用户帐户kerberos500中,转到“帐户”选项卡,滚动到底部,然后选中“ DES”,“ AES 128”和“ AES 256”的所有复选框,然后确定您离开了对话框。即使您已完成上述所有操作,也必须选中这些框,否则Kerberos身份验证仍将失败。

如何正确重新生成密钥表:每当您计划制作与该用户帐户关联的密钥表时,均不应运行setspn
-a命令将SPN添加到AD用户。原因是因为keytab创建命令将SPN作为命令的一部分添加到了用户帐户中。如果遵循我的上述建议后您的方案仍然无法使用,则需要通过setpn
-D删除SPN,如下所示:

setspn -D HTTP/nickis.life@NICKIS.LIFE kerberos500

然后重新生成密钥表,我唯一的变化是我告诉它使用所有加密类型。客户端和服务器将在身份验证过程中就最强的通用协议达成一致。

ktpass -out c:UsersAdministratorkerberos500.keytab -princ HTTP/nickis.life@NICKIS.LIFE -mapUser kerberos500 -mapOp set -pass XXXXpasswordforkerberos500userXXXX -crypto ALL -pType KRB5_NT_PRINCIPAL

然后用新的密钥表替换新的密钥表。有关密钥表的其他深入信息,您可以从我的技术文章中阅读有关如何创建Kerberos密钥表的更多信息:
Kerberos密钥表–解释。我经常根据在此论坛上看到的问题返回并对其进行编辑。

顺便说一句, HTTP / kerberos500.nickis.life
是服务主体,而不是您在问题中所写的用户主体。我只使用Web浏览器在这种HTTP场景中测试Kerberos,而不使用cURL。

如果您认真地完成了我上面强调的所有四点,那么我很肯定,您将解决此问题。

编辑1:
此答案假定您在具有完全限定域名kerberos500.nickis.life的主机上运行HTTP服务。如果您没有使用该名称的主机,我的回答将略有变化。请让我知道。

EDIT2:
要使用http://nickis.life:8080的URL达到身份验证的目的,则可以继续使用已经创建的相同密钥表。

在AD帐户NICKIS kerberos500上,转到“帐户”选项卡,滚动到底部,然后选中“为此帐户使用Kerberos DES加密类型”框。

然后,通过组策略在AD域级别启用DES加密本身。为此,请执行以下操作:

  1. 打开组策略管理控制台(GPMC)。
  2. 编辑默认域策略GPO。(创建新的域级GPO并进行编辑比较安全,但这取决于您)。
  3. 导航到“计算机配置”>“策略”>“ Windows设置”>“安全性”>“本地策略”>“安全性选项”>“网络安全性:配置Kerberos允许的加密类型”,并选中DES_CBC_MD5和DES_CBC_MD5的两个复选框。重要说明:在同一组策略中,还要确保还选中了RC4,AES128和AES256的复选框。这些加密类型不会用于您的网站票证,但会用于域中的其他所有票证。单击确定,然后退出对话框并关闭GPMC。
  4. 在DC服务器和客户端上运行“ gpupdate / force”命令。
  5. 在客户端上运行“ klist purge”以清除所有Kerberos票证。
  6. 在Web浏览器中,清除缓存并删除所有cookie。
  7. 确保DC服务器允许端口8080 TCP入站。
  8. 再试一次。

参考:Kerberos支持的加密类型的Windows配置

编辑3:避免在同一台计算机上运行Kerberos
KDC(DC),客户端和服务器。这是获得“缺陷令牌错误”的经典方法,即使您已正确完成所有其他操作。

编辑4 :(经过OP验证的最终更新):查看了新的ktpass keytab创建输出,并且我看到了:定向域控制器:WIN-
OVV6VHBGIB8.fusionis.life。现在,密钥表中定义的SPN是HTTP /
kerberos500.nickis.life。AD域名与您定义的SPN不同,因此除非您在这些域之间建立了某种信任关系,否则它将无法正常工作。如果没有信任关系,则需要使用HTTP
/ kerberos500.fusionis.life的SPN。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431101.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号