我们已经在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
这两个常见的原因是:
您可能在某处有重复的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正确,那么更改这可能就足够了。 不知道如何改变。