在尝试将示例 Spring Security kerberos 应用程序集成到我的实际应用程序之前,我正在尝试使其运行。这是我正在运行的应用程序:https ://github.com/spring-projects/spring-security-kerberos/tree/master/spring-security-kerberos-samples/sec-server-win-auth/src/main
我已经设置了 spn,并创建了 keytab,在运行应用程序时,我尝试使用 chrome 访问,我得到一个错误 500
在服务器控制台上显示为:
Negotiate Header was invalid:
org.springframework.security.authentication.BadCredentialsException:
GSSContext name of the context initiator is null
at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator$KerberosValidateAction.run(SunJaasKerberosTicketValidator.java:253)
我可以从代码中看到,当getSrcName()
从GSSContext
返回 null 时会发生这种情况。
现在我只在我的笔记本电脑上运行,尝试让它工作。运行 spring 应用程序的 java 进程在我用来登录的同一 Windows 帐户下运行。DNS 已配置,以便我可以使用laptop-name.mycompany.com
以下是我为 spn 和 keytab 所做的访问我的笔记本电脑:
setspn -A HTTP/laptop-name.mycompany.com:8080 myWindowsUsername
ktpass -princ HTTP/laptop-name.mycompany.com:8080@MYCOMPANY.COM -pass password123 -mapuser myWindowsUsername@mycompany.com -out keytab.keytab -ptype KRB5_NT_PRINCIPAL
在security
我添加的 java 目录中krb5.conf
,其中包含以下内容:
[Libdefaults]
permitted_enctypes = arcfour-hmac-md5 rc4-hmac aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tgs_enctypes = arcfour-hmac-md5 rc4-hmac aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
default_tkt_enctypes = arcfour-hmac-md5 rc4-hmac aes256-cts aes128-cts des3-cbc-sha1 des-cbc-md5 des-cbc-crc
dns_lookup_kdc = true
dns_lookup_realm = false
[Domain_realm]
mycompany.com = MYCOMPANY.COM
.mycompany.com = MYCOMPANY.COM
我不确定这是否是一个问题,但是当我使用 kinit 验证密钥表时,我在输出的底部看到了这个
Looking for keys for: -V@MYCOMPANY.COM
default etypes for default_tkt_enctypes: 23 23 18 17 16.
Exception: krb_error 0 Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type: No error
KrbException: Do not have keys of types listed in default_tkt_enctypes available; only have keys of following type:
at sun.security.krb5.internal.crypto.EType.getDefaults(EType.java:280)
at sun.security.krb5.KrbAsReqBuilder.build(KrbAsReqBuilder.java:261)
at sun.security.krb5.KrbAsReqBuilder.send(KrbAsReqBuilder.java:315)
at sun.security.krb5.KrbAsReqBuilder.action(KrbAsReqBuilder.java:361)
at sun.security.krb5.internal.tools.Kinit.<init>(Kinit.java:219)
at sun.security.krb5.internal.tools.Kinit.main(Kinit.java:113)
输出还表明主体是-V@MYCOMPANY.COM
看起来不正确的。
对于 keytabs 和 GSS api 的使用,我还是个新手。我不确定这是否是我的 keytab 生成、spn 设置或我的系统配置的问题,任何帮助都会非常感激。