使用Java和ActiveDirectory的Kerberos身份validation:KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN

我们已经在URL http://alf-test.example.com/下使用Kerberos获得了启用SSO的Java应用程序。 不幸的是,有些东西不起作用,AD公司说它不知道服务的原则。 这是TGS-REQ交换:

请求:

Kerberos TGS-REQ Record Mark: 1499 bytes 0... .... .... .... .... .... .... .... = Reserved: Not set .000 0000 0000 0000 0000 0101 1101 1011 = Record Length: 1499 Pvno: 5 MSG Type: TGS-REQ (12) padata: PA-TGS-REQ KDC_REQ_BODY Padding: 0 KDCOptions: 40810000 (Forwardable, Renewable, Canonicalize) Realm: EESERV.LOCAL Server Name (Service and Instance): HTTP/alf-test.example.com Name-type: Service and Instance (2) Name: HTTP Name: alf-test.example.com till: 2037-09-13 02:48:05 (UTC) Nonce: 632225483 Encryption Types: rc4-hmac rc4-hmac-old rc4-md4 des-cbc-md5 des-cbc-crc rc4-hmac-exp rc4-hmac-old-exp 

回复:

 Kerberos KRB-ERROR Record Mark: 125 bytes 0... .... .... .... .... .... .... .... = Reserved: Not set .000 0000 0000 0000 0000 0000 0111 1101 = Record Length: 125 Pvno: 5 MSG Type: KRB-ERROR (30) stime: 2011-06-08 12:06:23 (UTC) susec: 23385 error_code: KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN (7) Realm: EESERV.LOCAL Server Name (Service and Instance): HTTP/alf-test.example.com Name-type: Service and Instance (2) Name: HTTP Name: alf-test.example.com e-data 

但是,以下工作:

 kinit HTTP/alf-test.example.com 

另外,当我想要setspn列出服务主体名称时,我得到这个输出,这对我来说很好:

 setspn -l test-alfrescohttp Registered ServicePrincipalNames for CN=Alfresco-Test HTTP,CN=Users,DC=example,DC=com: HTTP/alf-test HTTP/alf-test.example.com 

所以,服务主体似乎存在,但是当浏览器第一次碰到主机时,我经常在Wireshark中看到KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN错误。 我很困惑,这里有什么可能是错的?

最好的问候,迈克尔

KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN表示KDC不知道谁拥有SPN,在您的情况下请求的SPN是HTTP/self-test.example.com

这两个常见的原因是:

  1. SPN不存在于Active Directory林中的任何帐户(似乎不是您的情况)
  2. 有多个持有相同SPN的帐户(重复的SPN)

您可能在某处有重复的SPN,因此两个或更多帐户持有相同的SPN。

要检查AD森林哪些帐户持有SPN,请运行以下命令:

 setspn -Q HTTP/self-test.example.com 

这应该显示所有的账户(如果有的话),携带该SPN。

如果您希望使用查询,则A * (通配符)也是有效的

例如setspn -Q HTTP/self-test*

Realm: EESERV.LOCAL请求一张票Realm: EESERV.LOCAL
应该要求门票Realm: EXAMPLE.COM

导致相同的Registered ServicePrincipalNames for CN=Alfresco-Test HTTP,CN=Users,DC=eeserv,DC=local:

假设服务主体存在于AD中并且configuration正确,那么更改这可能就足够了。 不知道如何改变。