我有一个 Java 应用程序,它使用 Kerberos 在 URL 下启用了 SSOhttp://alf-test.example.com/。不幸的是,有些东西不起作用,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 错误。我很困惑,这里可能出了什么问题?
谨致问候,迈克尔
答案1
KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN
意味着 KDC 不知道谁持有 SPN,在你的情况下请求的 SPN 是HTTP/self-test.example.com
造成这种情况的两个常见原因是:
- Active Directory 林中的任何帐户都不存在 SPN(似乎不是您的情况)
- 有多个账户持有相同的 SPN(重复 SPN)
您可能在某处有重复的 SPN,因此两个或多个帐户持有相同的 SPN。
要检查 AD 林中哪些帐户持有 SPN,请运行以下命令:
setspn -Q HTTP/self-test.example.com
这将向您显示所有带有该 SPN 的帐户(如果有)。
*
如果您希望使用通配符进行查询,则 (通配符) 也是有效的
例如 setspn -Q HTTP/self-test*
答案2
申请票Realm: EESERV.LOCAL
应该申请票Realm: EXAMPLE.COM
原因与来源相同Registered ServicePrincipalNames for CN=Alfresco-Test HTTP,CN=Users,DC=eeserv,DC=local:
假设服务主体存在于 AD 中并且配置正确,则更改它可能就足够了。不知道如何更改。